好吧,我真的很困惑我写的一些代码。它是一个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()方法后,我只是一个空文件... 我真的出来的想法就是如何解决这个...
*我真的很困惑我写了一些代码*,那么你是怎么写的? – NINCOMPOOP 2013-04-22 15:17:27
'新的FileOutputStream(DATA_FILE,false)'将永远清除你的'DATA_FILE'。 – DaoWen 2013-04-22 15:19:59
什么是setvalue方法。在那里看不到写入文件的一行代码。 – 2013-04-22 15:20:59