Java - 文件保存不起作用

时间:2015-05-30 14:07:40

标签: java file save javafx-2

我想将一个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);
    }

}

2 个答案:

答案 0 :(得分:1)

有几个问题可能导致此问题。对于初学者来说,这段代码不会编译。这是因为你在方法 save 中调用变量 stage ,其中&#34;死了&#34;在 start 方法中。要在 save 中调用 stage ,您需要将其传递给 save 或将其另存为字段。第二个问题是 SaveFile 方法似乎不存在。 SaveFile 的示例可能类似于下面的代码。请注意,我更新了方法 save 以进入舞台,我将方法 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();
        }
      }

    }

答案 1 :(得分:1)

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

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

        }