【发布时间】: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