Как изменить путь к файлу в Java? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть функция Сохранить как ... в моем текстовом редакторе. Я хотел бы сделать Сохранить как, сохранить в новый файл, но тогда мой постоянный файл для сохранения теперь должен всегда быть этим новым файлом. Поэтому, когда я нажимаю другую кнопку «Сохранить», вместо сохранения в предыдущее местоположение будет продолжать сохранять в том месте, которое было выбрано с помощью JFileChooser.

У меня есть объект File с именем currentFile, который должен ссылаться на файл, выбранный с помощью Сохранить как. В настоящее время я проверяю это, создав файл fileName в своей функции выполнения действия кнопки, а затем установив для этого файла currentFile

    File fileName = new File(fileChoice.getSelectedFile() + ".txt");
    currentFile = fileName;

Мне было интересно, смогу ли я добиться того же, не создавая новый файл..? Мне кажется, что создание нового файла следует за конструктором File(String pathname), но, похоже, нет способа установить путь к файлу.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Вы не можете изменить путь к файлу, потому что, как вы можете прочитать в документах и в этом ответе :

"Экземпляры класса File являются неизменяемыми то есть после создания абстрактный путь, представленный объектом File, никогда не изменится "

, поэтому вам нужно создать еще один экземпляр File.

Также renameTo () метод использует другой экземпляр File в качестве параметра для изменения пути

File fileToMove = new File("path/to/your/oldfile.txt");
boolean isMoved = fileToMove.renameTo(new File("path/to/your/newfile.txt"));

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

0 голосов
/ 02 марта 2020

Вы просите изменить имя пути, но на самом деле вы хотите переместить файл. Файлы # move делают это за вас.

Path path = Paths.get("my", "path", "to", "file.txt");

Path moveToPath = Paths.get("my", "path", "to", "moved", "file.txt");

Path moveResult = Files.move(path, moveToPath, StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.ATOMIC_MOVE);

if (!moveToPath.equals(moveResult)) {
    throw new IllegalStateException("Unable to move file to requested location.");
}
...