Java запись в файл не работает, плохая генерация пути?(чтение работ) - PullRequest
0 голосов
/ 03 июня 2018

Я работаю над школьным проектом, в котором мне нужно инициализировать состояние моей программы с помощью txt-файла.Я никогда по-настоящему не работал с чтением файлов, поэтому я использовал учебник здесь , чтобы сгенерировать путь к папке ресурсов, используемой в проекте.

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("savedState.txt").toURI());
BufferedReader br = new BufferedReader(new FileReader(file));

Это прекрасно работает!Проблема приходит, когда я пытаюсь записать обратно в файл.Я пытался использовать подобный подход, и это не похоже на работу.Файл остается пустым, когда я использую этот код.

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("savedState.txt").toURI());
//File file = new File("/actual file path/savedState.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));

Самое страшное, что он работает нормально, когда я использую фактический путь к файлу (третья строка вместо первых двух).Я не уверен, как заставить это работать!

Наверное, мне следует добавить то, что пишется (возможно, я делаю это неправильно).Это то, над чем он работает, токены

for (int i=0;i<tokens.size();i++)
    bw.write(tokens.get(i)+',');

bw.close();

представляют собой ArrayList, тип String

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Третья строка, которая работает, должна быть наиболее правильной, если вы хотите ЗАПИСАТЬ файл.Например, если файл находится внутри вашего .jar-файла или .war-файла, вы сможете прочитать его с помощью Classloader, но не записывать в него.

Предложение. Вызывайте свою программу следующим образом:

java -Dfilepath=/path/to/file -jar yourjar.jar

Тогда в вашем коде:

File file = new File(System.getProperty("filepath"));
0 голосов
/ 04 июня 2018

Гильерме Мусси сообщил мне, что то, что я делаю, вероятно, не сработает для письма.Поэтому я стал больше искать и обнаружил, что создание пути к файлу не так сложно.Вот код, которым я закончил, и он работает как для чтения, так и для записи.

String fsep = System.getProperty("file.separator");
File file = new File(System.getProperty("user.dir")+
        fsep+"src"+fsep+"main"+fsep+"resources"+fsep+"savedState.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
0 голосов
/ 03 июня 2018

Попробуйте:

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
...