【问题标题】:File is not created on Mac文件不是在 Mac 上创建的
【发布时间】:2021-06-24 10:37:43
【问题描述】:

我编写了一个程序,它将设置的配置写入 Java 可执行文件目录中的文本文件。写入文件的方法如下。

public class ConfigWriter {

    public static void main(String[] args) {
        try {
            FileWriter writer = new FileWriter("MyFile.txt", false);
            BufferedWriter bufferedWriter = new BufferedWriter(writer);
            bufferedWriter.write(args[0]);
            bufferedWriter.newLine();
            bufferedWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void Config(String[] settings, String[] filenames) {
        System.out.println("Settings: "+Arrays.toString(settings));
        String[] configurations = new String[settings.length+filenames.length];
        int c=0;
        for(int i=0;i<settings.length;i++){
            configurations[i]= settings[i];
            c++;
        }
        for(int j=0;j<filenames.length;j++){
            configurations[c++]= filenames[j];
        }

        try {
            FileWriter writer = new FileWriter("ConfigFile.txt", false);
            BufferedWriter bufferedWriter = new BufferedWriter(writer);
            for(int i=0; i<configurations.length; i++){
                bufferedWriter.write(configurations[i]);
                bufferedWriter.newLine();
            }
            bufferedWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

调用此方法时,它通常会将名为 Config.txt 的文件写入可执行文件所在的目录。

但是,虽然这似乎适用于应用程序的 Windows 版本。该应用程序的 Mac 版本似乎与 MACOS 的最新更新存在一些问题。这个 Config.txt 文件可以在 MAC 上创建,但我需要从命令行运行 Java 可执行文件。关于为什么在从命令行运行 Java 可执行文件时创建 Config.txt 文件而不是在作为应用程序单击它时创建 Config.txt 文件的任何想法?

我附上了下面调用 Config 方法的脚本:

 button.setOnAction( e -> {
                //System.out.println("Running Proteinarium");
                //System.out.println(ProjectName.getText());

                if(ProjectName.getText() != null){
                    Projectname = ProjectName.getText();
                }

                if(GS1FileLocation!=null && GS2FileLocation!=null){
                    filenames = new String[]{GS1FileLocation, GS2FileLocation, "projectName="+Projectname};
                    ConfigWriter.Config(Settingsarray, filenames);
                    final ProteinariumThread service = new ProteinariumThread();
                    service.start();
                    window.setScene(scene2);
                    textArea.appendText("Proteinarium Running see " + fileName+ " for additional information on the Proteinarium Run... \n");
                }
                else if(GS1FileLocation!=null){
                    filenames = new String[]{GS1FileLocation,"projectName="+Projectname};
                    ConfigWriter.Config(Settingsarray, filenames);
                    final ProteinariumThread service = new ProteinariumThread();
                    service.start();
                    window.setScene(scene2);
                    textArea.appendText("Proteinarium Running see " + fileName+ " for additional information on the Proteinarium Run... \n");
                }
                else if(GS2FileLocation!=null){
                    filenames = new String[]{GS2FileLocation,"projectName="+Projectname};
                    ConfigWriter.Config(Settingsarray, filenames);
                    final ProteinariumThread service = new ProteinariumThread();
                    service.start();
                    window.setScene(scene2);
                    textArea.appendText("Proteinarium Running see " + fileName+ " for additional information on the Proteinarium Run... \n");
                }
                else{
                    System.out.println("No Genesetfile recorded");
                    Alert dg = new Alert(Alert.AlertType.INFORMATION);
                    dg.setTitle("Proteinarium Information");
                    dg.setContentText("Please Specify a Geneset File");
                    dg.show();
                }

    }
    );

【问题讨论】:

  • 如果您要处理文件,最好了解current directory 是什么。没有目录组件的文件名是相对于当前目录的,这是不可靠的。像用户主目录这样的已知目录更可靠:new File(System.getProperty("user.home"), "MyFile.txt")

标签: java javafx terminal settings


【解决方案1】:

也许不是

new FileWriter("MyFile.txt", false);

试试

new FileWriter(new File("MyFile.txt").getAbsolutePath(), false);

我不确定这是否能解决问题,但可能是路径问题

【讨论】:

    【解决方案2】:

    是的,这是在 MAC 笔记本电脑上使用的正确方法

     new FileWriter(new File("MyFile.txt").getAbsolutePath(), false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 2021-08-10
      • 2016-07-10
      • 1970-01-01
      • 2016-07-13
      • 2010-09-09
      • 2012-09-06
      相关资源
      最近更新 更多