Я пишу программу Java, которая печатает информацию в текстовый файл во время работы. При тестировании моей программы на моем Mac в Eclipse она работает правильно — как создание текстового файла, так и запись в него. Я экспортировал свою программу в файл .jar для тестирования на разных компьютерах, и когда я запускаю файл .jar на других компьютерах Mac, все работает как надо. Однако, когда я запускаю программу на компьютере с Windows, создается файл, но в него ничего не записывается. Я искал проблемы с Filewriter в разных операционных системах, но пока ничего не нашел - мысли?
Ниже приведен код, который я использую для записи в файл. Он находится в задаче таймера и записывает значение угла и отметку времени в файл при каждом выполнении. Все остальное в задаче таймера работает правильно во всех операционных системах, так что это не проблема. Если это поможет, вот пример файла, который может выглядеть так:
1 270
2 30
3 26
4 29
и т. д., причем первый столбец содержит количество времени, а второй столбец содержит значение угла.
Код:
public AnAngleTimerTask(Model newModel, int newCounter, int newEndAnalysis,
int newSampleEvery) {
model = newModel;
counter = newCounter;
endAnalysis = newEndAnalysis;
sampleEvery = newSampleEvery;
angles = new int[(int) Math
.floor((endAnalysis - counter) / sampleEvery)];
times = new int[(int) Math.floor((endAnalysis - counter) / sampleEvery)];
file = newFile();
}
@Override
public void run() {
PrintWriter out;
System.out.println(counter);
// get angle and write to file
if (!model.getTimer().getPaused()) {
int usbAngle = retrieveAngle();
times[i] = counter;
angles[i] = usbAngle;
try {
out = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));
out.printf("%-10d %-10d\n", counter, usbAngle);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
model.setAngle(usbAngle);
i++;
counter = counter + sampleEvery;
}
if (counter == endAnalysis) {
model.setMeanAngle(angles);
model.setR(angles);
System.out.println("End Analysis");
cancel();
}
}
public File newFile() {
String nameString;
Date myDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:HH-mm-ss");
String myDateString = sdf.format(myDate);
if (model.getArenaName() == null) {
nameString = "Arena" + model.getName() + "Tracker";
} else {
nameString = model.getArenaName();
}
File file = new File(model.getPath() + "/" + nameString + "_"
+ model.getName() + "_" + myDateString + ".txt");
model.setLastDataRecordedToFile(file.getAbsolutePath());
return file;
}
Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация или код для контекста.