Java - 文件保存不起作用

Java - File save does not work

我想将 ArrayList 的内容保存到文件中(用户应选择 .txt 的位置),但我不确定该怎么做,因为该代码无法正常工作。

你知道怎么做吗?

package vizsgaquiz;

import java.io.File;
import java.util.ArrayList;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.FileChooser;
import javafx.stage.Stage;


public class VizsgaQuiz extends Application {

    ArrayList<String> kerdeslista = new ArrayList<String>();
    String a ="a";


    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Foablak.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.setTitle("Quiz Játék");
        stage.show();
        save();
    }

    public void save(){
                kerdeslista.add(a);

                FileChooser fileChooser = new FileChooser();

              //Set extension filter
              FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
              fileChooser.getExtensionFilters().add(extFilter);

              //Show save file dialog
              File file = fileChooser.showSaveDialog(stage);

              if(file != null){
                  SaveFile(kerdeslista, file);
              }
    }



    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

有几个问题可能会导致此问题。对于初学者来说,这段代码无法编译。这是因为你在方法 save 中调用变量 stage 而在方法 start[=24] 中调用变量 "died" =].要在 save 中调用 stage,您需要将其传递给 save 或将其保存为字段.第二个问题是 SaveFile 方法似乎不存在。 SaveFile 的示例可能类似于下面包含的代码。请注意,我更新了方法 save 以接收 Stage 并且我将方法的名称 SaveFile 更改为 saveFile 以匹配 Java 命名约定。此外,下面的代码将 arraylist 的每个值打印在一个新行上,您可能不希望这样。

    package vizsgaquiz;

    import java.io.File;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.FileChooser;
    import javafx.stage.Stage;


    public class VizsgaQuiz extends Application {

      ArrayList<String> kerdeslista = new ArrayList<String>();
      String a ="a";


      @Override
      public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Foablak.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.setTitle("Quiz Játék");
        stage.show();
        save(stage);
      }

      public void save(Stage stage){
        kerdeslista.add(a);

        FileChooser fileChooser = new FileChooser();

        //Set extension filter
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
        fileChooser.getExtensionFilters().add(extFilter);

        //Show save file dialog
        File file = fileChooser.showSaveDialog(stage);

        if(file != null){
          saveFile(kerdeslista, file);
        }
      }


      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
        launch(args);
      }

      public static void saveFile(ArrayList<String> list, File file) {
        try {
          PrintWriter out = new PrintWriter(file);
          for (String val : list)
            out.println(val + "\n");
          out.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }

    }

这里是一个示例,如何将新文件保存到指定目录和 FileDialog 中的文件名,从 Strings.It 的向量中获取的字符串对我有用!

 public static void SaveFileTo(Vector<String> myLines) {
            FileOutputStream f = null;
            DataOutputStream h = null;
            FileDialog d = new FileDialog(new JFrame(), "Save", FileDialog.SAVE);
            d.setVisible(true);
            String dir;
            dir = d.getDirectory();
            File oneFile = new File(dir + d.getFile());
            try {
                oneFile.createNewFile();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                f = new FileOutputStream(oneFile);
                h = new DataOutputStream(f);
                for (String de : myLines) {
                    h.writeBytes(de);               
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                try {
                    h.close();
                    f.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }