Файл renameTo () метод в Java с примерами
Метод renameTo () является частью класса File . Функция renameTo () используется для переименования абстрактного пути к файлу в заданный путь. Функция возвращает истину, если файл переименован, иначе возвращает ложь
Подпись функции:
Синтаксис:
Параметры: Функция требует назначения объекта File в качестве параметра, нового абстрактного пути к текущему файлу.
Возвращаемое значение: функция возвращает логический тип данных . Функция возвращает true, файл переименован, иначе возвращает false.
Исключение: этот метод генерирует следующие исключения:
- Исключение безопасности, если метод не разрешает операцию записи абстрактных путей.
- NullPointerException, если целевое имя файла равно нулю.
Ниже программы проиллюстрируют использование функции renameTo ():
Пример 1. Попробуйте переименовать файл program.txt в program1.txt
// Java-программа для демонстрации
// использование метода File.renameTo ()
public class GFG <
public static void main(String args[])
// создаем абстрактный путь (объект File)
File f = new File( «F:\\program.txt» );
// создаем объект файла назначения
File dest = new File( «F:\\program1.txt» );
// проверяем, можно ли переименовать файл
// к абстрактному пути
// показать, что файл переименован
// к абстрактному пути
System.out.println( «File is renamed» );
// показать, что файл не может быть переименован
// к абстрактному пути
System.out.println( «File cannot be renamed» );
Выход:
Пример 2: Попробуйте переименовать «program1.txt» в «prog.txt», «prog.txt» — это существующий файл на диске f :.
// Java-программа для демонстрации
// использование метода File.renameTo ()
public class GFG <
public static void main(String args[])
// создаем абстрактный путь (объект File)
File f = new File( «F:\\program1.txt» );
// создаем объект файла назначения
File dest = new File( «F:\\prog.txt» );
// проверяем, можно ли переименовать файл
// к абстрактному пути
// показать, что файл переименован
// к абстрактному пути
System.out.println( «File is renamed» );
// показать, что файл не может быть переименован
// к абстрактному пути
System.out.println( «File cannot be renamed» );
Выход:
Программы могут не работать в онлайн-среде IDE. пожалуйста, используйте автономную IDE и установите путь к файлу
Источник
Файл Java File.renameTo(File) не работает
Я пытаюсь перечислить содержимое каталога и переименовать определенные файлы.
Когда я запускаю это, я получаю » Tried to change file name but couldn’t. «. Я не верю, что Java рассматривает эти файлы как «открытые», поэтому я не думаю, что причина. Я даже запускал chmod 777 myDir , где myDir — это значение строки dirName , переданной в метод run .
Что мне здесь не хватает? Почему Java не будет переименовывать эти файлы? Это машины CentOS.
Изменить. Добавлены распечатки для f и newFile , которые выглядят следующим образом:
Проблема заключается в том, что f.getName() возвращает компонент последнего имени пути, представленный f . Затем вы массируете эту строку и верните ее обратно в File . Но File теперь представляет собой путь относительно текущего каталога, а не каталог, содержащий исходный путь.
В результате ваш код на самом деле пытается переименовать файлы из dirName в текущий каталог приложения. Это может быть неудачно, потому что файлы уже существуют в текущем каталоге с этими именами или потому, что dirName и текущий каталог находятся в разных файловых системах. (Вы не можете переименовать файл из одной файловой системы в другую. вам нужно скопировать его.)
Обратите внимание, что File в Java представляет собой путь, а не файл или папку. В вашем коде объекты f являются именами путей для объектов файловой системы (файлов или папок) в каталоге, обозначаемом строкой dirName . Каждый из этих объектов f будет иметь часть каталога.
Существует несколько способов исправить ваш код; например
- изменить name = f.getName() на name = f.toString()
измените new File(subbedName) на new File(f.getParentFile(), subbedName)
У меня есть альтернативная/дополнительная теория.
Имя файла, содержащего символ \uFFFD , выдается как «mojibake»; т.е. вид искаженного текста, который вы получаете, когда вы показываете кодированный текст, используя неправильную кодировку. И поскольку мы видим 3 символа искаженного текста, я подозреваю, что он пытается отобразить рендеринг UTF-8 \uFFFD как Latin-1.
Источник
File renameTo не работает
Я пытаюсь добавить расширение к имени файла, выбранного JFileChooser , но не могу заставить его работать.
Я не могу понять, почему это не работает. Я также пробовал использовать getPath () и getCanonicalPath (), но результат тот же. Файл создается в выбранном каталоге, но без расширения «.txt».
4 ответа
Мне кажется, что все, что вам нужно сделать, это изменить имя выбранного файла, а не переименовывать файл в файловой системе. В этом случае вы не используете File.renameTo . Просто измените File . Что-то вроде следующего должно работать:
File.renameTo пытается переименовать файл в файловой системе. Например:
После этих трех строк success будет true , если файл test1.txt можно переименовать в test2.txt , и false , если переименование было неудачным (например, test1.txt не существует, открыт в другом процессе, в доступе отказано и т. Д.)
Я рискну предположить, что переименование, которое вы пытаетесь сделать, терпит неудачу, потому что вы пытаетесь переименовать каталог (вы используете JFileChooser с опцией DIRECTORIES_ONLY ). Если у вас есть программы, использующие файлы в этом каталоге, или если внутри него открыта командная строка, они будут возражать против переименования этого каталога.
Если вы хотите переименовать файл, необходимо закрыть весь объект (например, FileReader, FileWriter, FIS, FOS означает закрыть объект чтения файла, а затем переименовать его.
Вы пишете не в тот файл. Когда вы вызываете renameTo, текущий файл не меняет свой путь. Попробуй это:
Вы также можете использовать Files.move из библиотек Google Guava для переименования файла. Это проще, чем писать собственный метод.
Перемещает файл с одного пути на другой. Этот метод позволяет переименовать файл или переместить его в другой каталог, как команда Unix mv.
Источник
RenameTo, похоже, случайно не работает
О RenameTo написано много сообщений, но, к счастью, ни одна из них не является моей проблемой и не отвечает на нее: ‘(
Моя проблема: я передаю файл своей проге, затем она его зашифрует, вычисляет хэш зашифрованного файла и переименовывает этот зашифрованный файл с этим хешем. Для этого я сначала создаю зашифрованный файл с именем «tmp», затем вычисляю его имя (с вызовом «myfile.setFileID ()» в приведенном ниже коде), а затем использую RenameTo для его переименования.
Шифрование работает хорошо, хеш-функция тоже (без сомнения, я некоторое время использовал и то, и другое, прежде чем пытаться это реализовать). На самом деле все работает хорошо . кроме случаев, когда RenameTo не работает. И я не знаю почему.
Вот часть кода, в которой я использую RenameTo:
Иногда это работает хорошо, иногда я получаю сообщение «невозможно переименовать файл». Каждый раз файл tmp создается правильно, поэтому кажется, что он действительно исходит от renameTo. Кроме того, я уже провел много тестов, и он может не работать или работать с тем же входным файлом (о, за исключением того, что зашифрованный файл не будет таким же даже для того же входного файла, так как ключ случайный .. Так что да, ввод для RenameTo не тот, но я имею в виду, что это не проблема «файл не найден» или проблема другой части моей программы).
Например, я могу запускать программу несколько раз, каждый раз давая ей один и тот же файл, и два раза в первый раз не удается, третий работает хорошо. Или я могу запустить его 10 раз, первые 9 раз работают хорошо, а последний — нет. Поскольку неудачи кажутся случайными, я не могу понять, что здесь не работает.
Я читал, что мог бы вместо этого использовать Files.move (), но мне кажется более «логичным» использовать RenameTo (), и я хотел бы понять, что здесь не так. Кроме того, Files.move () использует путь, и я просто хочу, чтобы это было сделано в моем каталоге проекта, поэтому мне достаточно имени файла.
1 ответ
Предполагая, что ваше новое имя файла представляет собой хеш-значение в кодировке Base64, я почти уверен, что rename не сработает в тех случаях, когда новое имя файла содержит / . При попытке переименовать файл в «abc/def» renameTo интерпретирует часть abc как каталог. Поскольку этот каталог не существует, renameTo завершится ошибкой (он не создает его неявно).
Источник
Java File.renameTo(File) not working
I’m trying to list a directory’s contents, and rename certain files.
When I run this, I get » Tried to change file name but couldn’t. » I don’t believe that Java is considering these files to be «open», so I don’t think that’s the reason. I’ve even ran chmod 777 myDir where myDir is the value of the dirName string passed into the run method.
What am I missing here? Why won’t Java rename these file(s)? These are CentOS machines.
Edit: Added printouts for both f and newFile , which is as follows:
3 Answers 3
You need to create your new File object with the full pathname of those files. So
should likely be:
(your search/replace may need to change)
The problem is that f.getName() returns the last name component of the path that is represented by f . You then massage this String and turn it back into a File . But the File now represents a path relative to the current directory, not the directory containing the original path.
As a result your code is actually attempting to rename the files from dirName into the application’s current directory. That could fail because files already exist in the current directory with those names, or because the dirName and the current directory are in different file systems. (You cannot rename a file from one filesystem to another . you have to copy it.)
Please note that a File in Java represents a pathname, not a file or a folder. In your code, the f objects are the pathnames for file system objects (either files or folders) in the directory denoted by the String dirname . Each of these f objects will have a directory part.
There is more than one way to fix your code; for example
Источник