2014-01-28 72 views
1

我試圖製作一個控制檯應用程序,用於創建文件並向其中寫入文本。我在這裏做錯了什麼?如何寫入文件

+2

問題是什麼? – Kick

+0

該代碼甚至不會編譯。順便說一句,你沒有關閉文件。 – m0skit0

+0

其中之一,你需要拋出一個'IOException'或'try/catch'你的文件訪問代碼。 –

回答

0
  1. 這是完全非法

    FileWriter fw = FileWriter; 
    
  2. 你可能想這

    BufferedWriter Text = new BufferedWriter(new FileWriter(file)); 
    
  3. 你有一個不必要的代碼塊

    { 
    
    } 
    
  4. 你的代碼會拋出IOExcpeption,所以你有兩個選擇。無論是

    public static void main(String[] args) throws IOException { 
    } 
    

    或者

    try { 
        BufferedWriter Text = new BufferedWriter(new FileWriter(file)); 
        .... 
        Text.write(inputText); 
        Text.close(); 
    } catch (IOException ex) { 
        ex.printStackTrace(); 
    } 
    
0

首先,讓我們的FileWriter FW開始。 fw應該是一個FileWriter對象,因此您需要創建一個FileWriter對象。

FileWriter fw = new FileWriter(file); 

現在,請注意您可能要更具體,因此是值得一試的FileWriter API

而且不同的構造函數,文字不會拋出和異常,它可能會拋出異常(說它會拋出一個異常,說你的代碼總是會失敗,並且在這種情況下,異常處理是「補丁」它 所以我建議添加一個catch子句,但是要記住,你必須總是自己關閉編寫器(Java除非另有規定,否則不這樣做),因此,您需要try with resource

try (FileWriter fw = new FileWriter(file); 
     BufferedWriter bw = new BufferedWriter(fw)){ 
      .... 
      writer.write(inputText); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 

,或者添加一個finally從句

FileWriter fw = new FileWriter(file); 
BufferedWriter writer = new BufferedWriter(fw); 
    try { 
    .... 
    writer.write(inputText); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally{ 
writer.close(); 
fw.close(); 
} 

因爲垃圾收集器不會關閉流,如果異常裏面拋出的嘗試,那麼它不會達到接近()命令,而是去捕捉(然後最終),而不關閉流。

0

正如其他人所說。不知道你究竟想要完成什麼,就很難知道所有錯誤的東西。

再次,作爲PopoFibo提到,這可能代表了大多數,似乎是語法不正確的事情是:

FileWriter fw = FileWriter; 

因此而不是列出什麼可能是錯誤的,這裏有一個例子可以幫助你。

在第一行中,您可以在控制檯中輸入您指定的文件名 - 就像您似乎想要做的那樣。

您輸入到控制檯的每個後續行都寫入該文件。輸入空行將終止輸入。

public class Program { 

    public static void main(String[] args) { 

     System.out.println("Enter file name:"); 
     Scanner input = new Scanner(System.in); 
     String fileName = null; 
     while (fileName == null) { 
      if (input.hasNextLine()) { 
       fileName = input.nextLine(); 
      } 
     } 

     try { 
      FileWriter fw = new FileWriter(fileName); 
      String newLine = System.getProperty("line.separator"); 

      System.out.println("Enter lines (enter empty line to terminate):"); 

      String line = null; 
      while (true) { 
       if (input.hasNextLine()) { 
        line = input.nextLine(); 
        if (isTerminatingEntry(line)) { 
         break; 
        } 
        fw.write(line + newLine); 
       } 
      } 

      fw.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     input.close(); 
    } 

    private static boolean isTerminatingEntry(String line) { 
     // add some condition that will cause you to stop reading input 
     // in this example, empty line will terminate the input 
     return line.length() == 0; 
    } 
} 
+0

我不知道如何回答編輯,但Elayeek編輯的內容不正確,因爲'finally中的'fw.close()'沒有它自己的try/catch不會編譯。我把'fw.close()'放在嘗試結束的地方來簡化事情,並且假設'FileWriter fw = new FileWriter(fileName)'之後不會有例外,直到try塊結束。如果我需要更健壯的東西,我可能會像[this](http://stackoverflow.com/a/2699270/520229)或像[this](http://stackoverflow.com/a/2699273/520229) 。 – mrzli