Another possibility if you don't like to see too many the else's is to drop the use of **else** altogether and throw in an extra return statement.  **Else** is kind of superfluous unless you require more complex logic to determine if there are more than just two action possibilities. 

Thus your example might become:

    void DoABunchOfStuff()
    {
        if(FileExists(file))
        {
            DoSomethingWithFileContent(file);
            return;
        }
    
        DefaultAction();
    }
    
    void DoSomethingWithFileContent(file)
    {        
        var contents = GetFileContents(file)
    
        if(SomeTest(contents))
        {
            DoSomething(contents);
            return;
        }
    
        DefaultAction();
    }
    
    AReturnType GetFileContents(file)
    {
        return OpenFile(file);
    }

Personally I don't mind using the **else** clause as it states explicitly how the logic is supposed to work, and so improves readability of your code.  Some code beautification tools however prefer to simplify to a single **if** statement to discourage nesting logic.