2010-06-24 36 views
1

我有一個簡單的單個Java文件,它具有主要方法和一堆其他方法。我想在我的主要方法中打開一個文本文件,但保持打開並在我的其他方法中追加到我的Java代碼中。在Java中使用它的最佳方式是什麼?使文本文件可用於Java中的所有方法

+3

你應該知道線程問題。 – 2010-06-24 21:42:52

+1

爲什麼你想要在'main'中打開並且始終保持打開的任何特定原因?聽起來有點可疑。您可以使用'FileWriter'的附加模式來始終寫入以避免覆蓋以前的內容。除非你所有的其他方法都和你的'main'在同一個類中(除此之外),否則我一定會盡量避免在'main'中放置這樣的邏輯。 – 2010-06-24 21:51:59

回答

3

請看看java.io.中的FileWriter

private FileWriter _writer; 

public static void main(String args[]) 
{ 
    _writer = new FileWriter(filePath, true); 
} 

filepath是您的文件的名稱,true是追加並且不會每次都重寫您的文件。這位作家會保持開放直到你關閉它。

_writer.close(); 

我會指出這可能不是最好的選擇。由於您可以隨時追加到文件中,因此沒有理由打開您的數據流。您可以簡單地使用append變量重新創建它爲true。

寫入方法可能更適合你,這樣你也可以將它放在它自己的線程上。

public static void write(String output) 
{ 
    FileWriter writer = new FileWriter(filePath, true); 
    writer.write(output); 
    writer.close(); 
} 
1

你所尋求的是一個作家,一個對象,讓方法寫進去(或PrintWriter的,它可以讓你打印的行由行)。您可以從各種輸出源創建作家,包括使用FileWriter的文件。

2

你所需要的面向對象編程被稱爲「實例變量」

這個變量是從同一個對象的方法訪問,你不必到處傳遞它。

所以,你的類可以被定義爲:

class MyClass { 
    // This is your instance variable 
    private PrintWriter output; 

    public void methodOne() { 
     output.println("One"); 
    } 

    public void methodTwo() { 
     output.println("Two"); 
    } 

    public void methodThree() { 
     output.println("Three"); 
    } 

    // you get the idea 

    public void close(){ 
     output.close(); 
    } 
} 

這樣,你可以創建MyClass一個對象,並初始化實例變量,並在所有的方法都使用它。

這可能是主要的方法:

public static void main(String [] args ) { 
     MyClass object = new MyClass(); 
     // add another method to initialize the instance variable 
     object.useFile("/Users/yourname/yourFile.txt"); 
     // useFile defined as: internally initialized as: 
     // output = new PrintStream(new FileOutputStream(fileName)); 
     object.methodOne(); 
     object.methodTwo(); 
     object.methodThree(), 
     object.close(); 
    } 

的想法,是有它在的方法的其餘部分中使用私有屬性,所以您不必在全部通過參考地點。

如果你有不同的類試圖訪問相同的屬性,也許你可以將這些方法移動到這個類。

相關問題