【问题标题】:How to Write text file Java如何编写文本文件 Java
【发布时间】:2013-03-23 04:21:15
【问题描述】:

以下代码不会生成文件(我在任何地方都看不到该文件)。 缺少什么?

try {
    //create a temporary file
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
        Calendar.getInstance().getTime());
    File logFile=new File(timeLog);

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile));
    writer.write (string);

    //Close writer
    writer.close();
} catch(Exception e) {
    e.printStackTrace();
}

【问题讨论】:

  • 1- 在关闭它之前尝试调用writer.flush()。 2-您应该使用finally 块来确保Writer 即使出现异常也已关闭
  • 你想把文件写到哪里?您需要指定 timeLog 的完整路径。示例是在 C:\ 下吗?
  • @user717630 不是真的。如果没有路径,文件将被写入当前的“工作”目录,该目录通常是执行程序的目录...
  • 尝试在创建编写器之前添加System.out.println(logFile.getCanonicalPath());,这将告诉您文件的写入位置。
  • 语言不同...不熟悉,找file.save方法

标签: java file file-io


【解决方案1】:

我认为你的期望和现实不匹配(但他们什么时候会;))

基本上,您认为文件写入的位置与文件实际写入的位置不相等(嗯,也许我应该写一个if 语句;))

public class TestWriteFile {

    public static void main(String[] args) {
        BufferedWriter writer = null;
        try {
            //create a temporary file
            String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
            File logFile = new File(timeLog);

            // This will output the full path where the file will be written to...
            System.out.println(logFile.getCanonicalPath());

            writer = new BufferedWriter(new FileWriter(logFile));
            writer.write("Hello world!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...
                writer.close();
            } catch (Exception e) {
            }
        }
    }
}

另请注意,您的示例将覆盖所有现有文件。如果要将文本附加到文件中,则应改为执行以下操作:

writer = new BufferedWriter(new FileWriter(logFile, true));

【讨论】:

  • 最后一部分不应该是:writer = new BufferedWriter(new FileWriter(logFile,true)); ??由于 append 参数是针对 FileWriter 而不是 BufferedWriter。
  • @third_eye 你破坏了我的乐趣;)很好,我已经更新了答案
  • 更安全,建议也指定编码:new FileWriterWithEncoding(logFile, "UTF-8", true)左右。
【解决方案2】:

我想在 MadProgrammer 的回答中补充一点。

如果是多行写入,执行命令时

writer.write(string);

人们可能会注意到,换行符在写入文件中被省略或跳过,即使它们在调试期间出现,或者如果在终端上打印相同的文本,

System.out.println("\n");

因此,整个文本都是一大块文本,这在大多数情况下是不可取的。 换行符可以依赖于平台,所以最好从java系统属性中获取这个字符使用

String newline = System.getProperty("line.separator");

然后使用换行符变量而不是“\n”。这将以您想要的方式获得输出。

【讨论】:

  • writer.newLine() 直接写行分隔符,取自 System.getProperty("line.separator")
【解决方案3】:

在 java 7 中现在可以做

try(BufferedWriter w = ....)
{
  w.write(...);
}
catch(IOException)
{
}

w.close 会自动完成

【讨论】:

    【解决方案4】:

    这不是创建文件,因为您从未真正创建过文件。你为它做了一个对象。创建实例不会创建文件。

    File newFile = new File("directory", "fileName.txt");
    

    你可以这样做来制作一个文件:

    newFile.createNewFile();
    

    你可以这样做来创建一个文件夹:

    newFile.mkdir();
    

    【讨论】:

      【解决方案5】:

      使用 java 8 LocalDateTime 和 java 7 try-with 语句:

      public class WriteFile {
      
          public static void main(String[] args) {
      
              String timeLog = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss").format(LocalDateTime.now());
              File logFile = new File(timeLog);
      
              try (BufferedWriter bw = new BufferedWriter(new FileWriter(logFile))) 
              {
                  System.out.println("File was written to: "  + logFile.getCanonicalPath());
                  bw.write("Hello world!");
              } 
              catch (IOException e) 
              {
                  e.printStackTrace();
              }
          }
      }
      

      【讨论】:

      • 您应该始终指定编码方案。
      【解决方案6】:

      您可以尝试使用 Java 库。 FileUtils,它有许多写入文件的功能。

      【讨论】:

        【解决方案7】:

        它确实对我有用。确保在 timeLog 旁边附加“.txt”。我在一个用 Netbeans 打开的简单程序中使用了它,它将程序写入主文件夹(builder 和 src 文件夹所在的位置)。

        【讨论】:

          【解决方案8】:

          对我来说最简单的方法就是:

                      try {
                          FileWriter writer = new FileWriter("C:/Your/Absolute/Path/YourFile.txt");
                          writer.write("Wow, this is so easy!");
                          writer.close();
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
          

          有用的提示和技巧:

          • 给它一个特定的路径:

            new FileWriter("C:/Your/Absolute/Path/YourFile.txt");

          • 换行

            writer.write("\r\n");

          • 将行追加到现有的 txt 中

            new FileWriter("log.txt");

          希望它有效!

          【讨论】:

            猜你喜欢
            • 2011-02-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-09
            • 2010-12-27
            • 2011-11-19
            • 2010-11-03
            相关资源
            最近更新 更多