64

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

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();
}
4

8 回答 8

122

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

基本上,您认为文件的写入位置和文件实际写入的位置是不相等的(嗯,也许我应该写一个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));
于 2013-04-02T01:29:06.633 回答
17

我想在 MadProgrammer 的回答中添加更多内容。

多行写入的情况下,执行命令时

writer.write(string);

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

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

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

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

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

于 2013-12-04T09:47:59.820 回答
14

在 java 7 中现在可以做

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

w.close 将自动完成

于 2014-04-06T19:54:54.337 回答
5

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

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

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

newFile.createNewFile();

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

newFile.mkdir();
于 2015-05-09T22:07:53.550 回答
1

使用 java 8LocalDateTime和 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();
        }
    }
}
于 2018-12-21T22:23:12.097 回答
0

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

于 2014-10-13T05:39:32.450 回答
0

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

于 2017-05-22T17:27:49.243 回答
0

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

            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

    新的 FileWriter("log.txt");

希望它有效!

于 2019-09-26T10:14:31.660 回答