【问题标题】:My File Clears Everytime I Run My Code - Java每次运行代码时我的文件都会清除 - Java
【发布时间】:2021-10-23 11:01:49
【问题描述】:

我有 Server-Client messenger - 不重要 - 我有一个设置文件来存储设置,但由于某种原因,当我运行代码时,设置文件会被清除。 以下是制作设置文件和目录的代码:

boolean exists = new File(System.getProperty("user.home")+"\\Documents\\Messenger Server").mkdir();
        File directory = new File(System.getProperty("user.home")+"\\Documents\\Messenger Server");
        File settingsFile = new File(System.getProperty("user.home")+"\\Documents\\Messenger Server\\settings.txt");
        if(exists){
            try {
                directory.createNewFile();
                System.out.println("Created");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
if(!settingsFile.exists()){
            try {
                settingsFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("Created Settings.txt");
            System.out.println(settingsFile.getAbsolutePath());
        }

这是读取和写入文件的代码:

try {
                    FileReader fileReader = new FileReader(settingsFile);
                    FileWriter fileWriter = new FileWriter(settingsFile);
                    BufferedReader bf = new BufferedReader(fileReader);
                    BufferedWriter bw = new BufferedWriter(fileWriter);
                }catch(IOException b){
                    b.printStackTrace();
                }
                ArrayList<String> settingList = new ArrayList<String>();
                for (int i = 0; i < 6; i++) {
                    try {
                        settingList.add(bf.readLine());
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
                if(!settingList.get(0).equals("alwaysOnTop=true")&&!settingList.get(0).equals("alwaysOnTop=false")){
                    try {
                        bw.write("alwaysOnTop=false");
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }

【问题讨论】:

标签: java bufferedreader filereader filewriter bufferedwriter


【解决方案1】:

FileWriter 构造函数可以接受一个布尔参数 (FileWriter(File file, boolean append)),如果为 true,则 FileWriter 会附加到文件而不是每次都覆盖它。像这样:

FileWriter fileWriter = new FileWriter(settingsFile, true);

【讨论】:

    【解决方案2】:

    @JustusG的答案是正确的。

    不过,我不建议使用 .txt 文件来保留应用程序的设置。 由于它们难以维护,您可能有重复的设置(因为附加...)等等。

    我建议使用.properties 文件。归根结底,他们做同样的事情,只是 .properties 文件有类可以读取和写入您的设置/属性。

    这是一个例子:

    Properties prop = new Properties();
    File propFile = new File("path/to/app.properties");
    InputStream in = new FileInputStream(propFile); // Open the prop file
    prop.load(in); // Load it in the Properties object
    
    prop.setProperty("setting1", "value1"); // Setting a new setting to what you need OR setting an old setting to a new value.
    
    String value2 = prop.getProperty("setting2"); // Reading a property
    
    //And at the end, writing the properties that you changed (without duplicates)
    prop.store(new FileOutputStream("xyz.properties"), null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      相关资源
      最近更新 更多