0

下面的代码将一个数组写入文件,但我的问题是它将它写入一行,而我每次写入时都需要它在换行符上,我不知道如何制作这部分代码工作。我尝试像添加字符串一样添加换行符的代码,但我假设这不是正确的方法,因为它不起作用。

private class SaveButtonListener implements ActionListener
  {
    public void actionPerformed (ActionEvent event)
    { 
      String [] data = dataSource.getList();

      JFileChooser chooser = new JFileChooser();
      chooser.setCurrentDirectory(new File("/home/me/Documents"));
      int retrival = chooser.showSaveDialog(null);
      if (retrival == JFileChooser.APPROVE_OPTION) {
        try {
          FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
          for (int i=0; i<data.length ; i++)
          {

            fw.write(data[i] + " \n");
          }
          //fw.write(data.toString());
          fw.close();
        } catch (Exception ex) {
          ex.printStackTrace();
        }

      }

    }
  }
4

4 回答 4

2

你有没有尝试过

fw.write(data[i] + System.getProperty("line.separator"));
于 2013-11-10T22:37:36.517 回答
1

从技术上讲,它正在编写换行符,但很可能您正在使用本身无法识别换行符的文本编辑器(例如记事本)查看文本文件。

尝试:

fw.write(data[i] + " \r\n");
于 2013-11-10T22:37:36.683 回答
0

您可以使用 aPrintWriter轻松打印单行

PrintWriter fw = new PrintWriter(new FileWriter(chooser.getSelectedFile()+".txt"));
for (int i=0; i<data.length ; i++) {
    fw.println(data[i]);
}
fw.close();

请注意,您应该将closea放入finally,否则可能会出现close未调用的情况。事实上,您应该使用新的 Java 7 try-with-resources synatx:

try(PrintWriter fw = new PrintWriter(new FileWriter(chooser.getSelectedFile()+".txt"))) {
    // stuff
} catch (IOException ex) {
    ex.printStackTrace();
}

请注意,这将输出特定于平台的换行符,例如\r\n在 windows 和\nUnix 上。创建文件时您会一次又一次遇到的一个问题是在另一个平台上打开在一个平台上创建的文件。

于 2013-11-10T22:35:44.670 回答
0
FileWriter fw = new FileWriter(chooser.getSelectedFile()+".txt");
  1. chooser.getSelectedFile()应该已经返回带有扩展名的文件名,因此尝试向其添加扩展名".txt"对我来说没有多大意义。

  2. 文件写入可能是一个冗长的操作。因此,您应该在单独的线程中运行文件写入操作,以避免阻塞EDTSwing 在其中执行事件管理和 GUI 渲染任务的线程。否则你的应用程序可能会被冻结

  3. 您可能有兴趣FileWriter(File file, boolean append)将数据附加到现有文件中。

  4. 尝试使用为您的平台System.getProperty("line.separator")获取正确的换行符。

于 2013-11-10T22:37:00.460 回答