Java -文件保存不起作用



我想保存一个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方法中已"死亡"。要在save中调用stage,您要么需要将其传递给save,要么将其保存为一个字段。第二个问题是方法SaveFile似乎不存在。SaveFile的示例可能类似于下面包含的代码。请注意,我更新了方法save以接受Stage,并且我将方法SaveFile的名称更改为SaveFile以匹配Java命名约定。此外,下面的代码将数组列表的每个值打印到另一行,您可能不希望这样做。

    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中保存新文件到指定目录和文件名的示例,从字符串向量中获取字符串。

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

相关内容

  • 没有找到相关文章

最新更新