如何写入文件

时间:2014-01-28 17:33:41

标签: java file bufferedwriter

我尝试创建一个控制台应用程序来创建文件并将文本写入其中。我在这里做错了什么?

package Writer;

import java.util.*;
import java.io.*;


public class main {

    public static void main(String args[]) {

    System.out.println("What would you like your SimpleText file name to be?");
    Scanner uInputName = new Scanner(System.in);
    String fileName = uInputName.nextLine();

    File file = new File(fileName);

    FileWriter fw = FileWriter;
    BufferedWriter Text = new BufferedWriter(fw);
    {

        System.out.println("What would you like to write in: " + fileName);

        Scanner uInputText = new Scanner(System.in);
        String fileText = uInputText.nextLine();

        fw.write(fileText);
        Text.newLine();
    }

    System.out.println("Okay. File saved.");

}

3 个答案:

答案 0 :(得分: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();
    }
    

答案 1 :(得分:0)

首先,让我们从FileWriter fw开始。 fw应该是FileWriter对象,因此,您需要创建一个FileWriter对象。

FileWriter fw = new FileWriter(file);

现在,请注意您可能希望更具体,因此值得检查FileWriter API

中的不同构造函数

此外,写入不会THROW和异常,它可能会出现异常(说它会抛出异常,说你的代码总是会失败,在这种情况下,异常处理就是“修补”它。 所以我建议添加一个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();
}

因为垃圾回收器没有关闭流,并且如果在try中抛出异常,那么它将不会到达close()命令,而是在不关闭流的情况下捕获(然后最终)。

答案 2 :(得分: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;
    }
}