0

わかりました、私が書いたいくつかのコードに本当に混乱しています。これは DataSetter (より適切な名前を知りませんでした...) であり、データ ファイル (data.txt) 内のデータを変更するメソッドを備えています。このデータの形式は次のとおりです@key=value (eg. @version=1.0)。今、私はこのコード行を実行しようとしました:

new DataSetter().setValue("version", "1.1");

ファイルをクリアするだけです。それがほとんどすべてです。今、完全に空ですが同じ名前の新しいファイルが作成されるため、ファイルがクリアされると思います。これが私のコードです:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

/**
 * This class contains methods to set specific data in the data.txt file. <br>
 * The data is rewritten every time a new value is set.
 * 
 * @author Casper van Battum
 *
 */
public class DataSetter {

    private static final File DATA_FILE = new File("resources/data.txt");
    private static final String lineFormat = "@%s=%s";

    private FileOutputStream out;
    private DataReader reader = new DataReader();
    private HashMap<String, String> dataMap = reader.getDataMap();
    private Scanner scanner;

    public DataSetter() {

        try {
            out = new FileOutputStream(DATA_FILE, false);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }

    public void setValue(String key, String newValue) {
        openDataFile();

        String oldLine = String.format(lineFormat, key, dataMap.get(key));
        dataMap.put(key, newValue);
        String newLine = String.format(lineFormat, key, newValue);

        try {
            replace(oldLine, newLine);
        } catch (IOException e) {
            e.printStackTrace();
        }

        closeDataFile();

    }

    private void replace(String oldLine, String newLine) throws IOException {
        ArrayList<String> tmpData = new ArrayList<String>();
        while (scanner.hasNextLine()) {
            String currentLine = scanner.nextLine();
            tmpData.add((currentLine == oldLine) ? newLine : currentLine);

        }

        out.write(new String().getBytes());

        String sep = System.getProperty("line.separator");
        StringBuffer sb = new StringBuffer();
        for (String string : tmpData) {
            sb.append(string + sep);

        }

        FileWriter writer = new FileWriter(DATA_FILE);
        String outString = sb.toString();
        writer.write(outString);
        writer.close();

    }

    private void openDataFile() {
        try {
            scanner = new Scanner(DATA_FILE);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }

    }

    private void closeDataFile() {
        scanner.close();

    }

}

したがって、 setValue() メソッドを実行した後、空のファイルができました...これを解決する方法については本当に考えがありません...

4

1 に答える 1