2014-01-28 48 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