Ich lese eine Textdatei in meinem Programm und mache einige Änderungen in der Datei und dann ohne das Programm zu stoppen, lese ich die Datei und immer wieder und jedes Zeit sollte ich in der Lage sein, die neueste Version der Datei zu lesen. nach der ersten Änderung in der Datei, andere Male bekomme ich immer noch diese Version der Datei und scheint, dass andere Änderungen nicht angewendet werden. Hier ist, wie ich die Datei lesen:Lesen einer Textdatei nach dem iterativen Aktualisieren ohne das Programm zu stoppen
public static Map<String, Float> readOwnersBiasFile() throws IOException {
FileInputStream file = new FileInputStream("ownersBias.txt");
Map<String, Float> ownerBiasMap = new HashMap<String, Float>();
//Construct BufferedReader from InputStreamReader
BufferedReader br = new BufferedReader(new InputStreamReader(file));
String line = null;
while ((line = br.readLine()) != null) {
String[] var = line.split("\\^");
ownerBiasMap.put(var[0], Float.valueOf(var[1]));
}
br.close();
return ownerBiasMap;
} und hier ist, wie ich meine Änderungen speichern:
public static void storeOwnersUtilityMap(Map<String, Float> ownersUtilityMap) throws IOException {
FileInputStream fileInputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
List<String> lines = new ArrayList<String>();
try {
fileInputStream = new FileInputStream("ownersBias.txt");
inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
bufferedReader = new BufferedReader(inputStreamReader);
String s;
String[] var;
if (bufferedReader.readLine() == null) {
for (Map.Entry<String, Float> entry : ownersUtilityMap.entrySet()) {
lines.add(entry.getKey().concat("^").concat(String.valueOf(entry.getValue())));
}
} else
while ((s = bufferedReader.readLine()) != null) {
var = s.split("\\^");
if (ownersUtilityMap.containsKey(var[0]))
s = var[0].concat("^").concat(String.valueOf(ownersUtilityMap.get(var[0])));
lines.add(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(bufferedReader);
IOUtils.closeQuietly(inputStreamReader);
IOUtils.closeQuietly(fileInputStream);
}
fileWriter(lines, "ownersBias.txt");
}
private static void fileWriter(List<String> list, String fileName) throws IOException {
File fout = new File(fileName);
FileOutputStream fos = new FileOutputStream(fout);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
bw.write(iterator.next());
bw.newLine();
}
bw.close();
}
Und in meinem Haupt-Methode Ich habe ein Schleife, die einige Sachen zusammen mit dem Lesen und der Änderung der Textdatei tut.
public static void main(String[] args) throws IOException, TasteException {
for(int i=0;i<10;i++){
map= readOwnersBiasFile();
do some stuff;
storeOwnersUtilityMap(map);
}
}
Können Sie einen tatsächlichen Code, der kompiliert? Es scheint, dass Sie zwei Methoden zusammengeführt haben – Dici
Ich aktualisierte die Beschreibung. – HimanAB
Anstatt die Datei wiederholt zu lesen und dann zu versuchen, zurück in die Datei zu schreiben, sollten Sie einfach eine RandomAccessFile verwenden, um sie an die Datei anzuhängen. – pczeus