FileWriter не записывает в файл с протоколом в URL - PullRequest
1 голос
/ 27 мая 2019

Я использую приведенный ниже код для записи в файл.

FileWriter writer = new FileWriter(outputPath);
writer.append(prettyJson);
writer.flush();
writer.close();

Я заметил, что содержимое не записывается в путь к файлу, начинается с "file: //".Есть какая-то конкретная причина для этого?

Ответы [ 4 ]

2 голосов
/ 27 мая 2019

Когда Java говорит об именах файлов в форме String, в документации обычно говорится

Системно-зависимое имя файла

, и поэтому оно ожидает ""повседневное" имя файла, например filename.ext, или что-то вроде c:\some\path\filename.ext в Windows или /some/path/filename.ext в Unix-подобных (на самом деле это работает на обоих, Java принимает / в качестве разделителя пути и в Windows)

Для имени файла с протоколом file:// используйте URI и оберните его в File:

FileWriter writer = new FileWriter(new File(new URI(outputPath)));
2 голосов
/ 27 мая 2019

Simple.Вы должны придерживаться документации.И в документации четко указано: https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File)

fileName - String The system-dependent filename.

Системно-зависимые средства:

  • /path/to/file в Linux / Mac
  • C:\path\to\file в Windows

file:// - это не имя файла, а URL-адрес, который чаще всего используется в браузерах.

1 голос
/ 27 мая 2019

Если вы пытаетесь использовать относительный путь, выберите:

FileWriter fw = new FileWriter("./" + fileName, true);
1 голос
/ 27 мая 2019

javadoc говорит:

public FileWriter (String fileName) генерирует IOException

Создает объект FileWriter с учетом имени файла.

Таким образом: при использовании этого интерфейса вы не можете передать URL, или URI, или что-либо, что легально может начинаться с file://.

Другими словами: это работает как задумано.Этот конструктор ожидает имя файла, простое и понятное.

Если у вас есть строка, похожая на URL, попробуйте что-то вроде этого:

URL fileURL = new URL("file://C:/whatever.txt");
InputStream is = fileURL.openStream();

Или просто создайте объект File из того UIR, который вы получили.Затем передать этот файловый объект немного отличному конструктору FileWriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...