Java не удается переименовать файл
У меня есть массив байт, я создаю файл и записываю массив байт в этот файл, потом закрываю запись. Как запись закрыта я хочу переименовать расширение файла.
Мой код:
FileOutputStream newFile = new FileOutputStream(rb_Path[0]+"\\"+file_id+".d"); //было .dat
//Записать массив полученных байт в новый файл .dat
newFile.write(byteNewFile);
newFile.flush();
//Закрываем создание нового файла
newFile.close();
File file_d = new File(rb_Path[0]+"\\"+file_id+".d");
//File file_dat = new File(rb_Path[0]+"\\"+file_id+".dat");
//file.d переименовать в file.dat
boolean isRenamed = file_d.renameTo(new java.io.File(rb_Path[0] + "\\" + file_id + ".dat"));
System.out.println(isRenamed);
Но получаю false. И как итог не переименовался файл (1234.d на 1234.dat).
Также пробовал так:
File file_d = new File(rb_Path[0]+"\\"+file_id+".d"); //Создан
File file_dat = new File(rb_Path[0]+"\\"+file_id+".dat"); //Не создан, служит объектом для rename
//file.d переименовать в file.dat
boolean isRenamed = file_d.renameTo(file_dat);
System.out.println(isRenamed);
Но все равно не получатся изменить расширение с .d на .dat.
rb_Path[0]- не имеет некорректных символов.file_id- это int, например 1234
Поэтому даже не знаю как быть.
Подскажите пожалуйста как можно решить такую задачу. Может стоит и вовсе делать все по другому? У кого есть решение? Заранее спасибо большое.
Ответы (1 шт):
Для того, чтобы переименовать файл, надо следить за символами в новом и старом имени.
Мой рабочий вариант кода:
FileOutputStream newFile = new FileOutputStream(rb_Path[0]+"\\"+file_id+".d");
//Записать массив полученных байт в новый файл .dat
newFile.write(byteNewFile);
newFile.flush();
//Закрываем создание нового файла
newFile.close();
System.out.println(rb_Path[0]); //Выводит: D:/Data/in
File file_d = new File(rb_Path[0]+"\\"+file_id+".d");
//Выводит: D:\Data\in\3406.d
System.out.println("File.d: "+file_d.getAbsolutePath());
if(file_d.exists()){
String newName = file_d.getAbsolutePath().replace(".d", ".dat");
//Выводит: D:\Data\in\3406.dat
System.out.println(newName);
//file.d переименовать в file.dat
boolean isRenamed = file_d.renameTo(new File(newName));
System.out.println(isRenamed);
}
else{
System.out.println("Не удалось переименовать файл");
}
(Я тестил на WIndows8). Моя ошибка была в непонимании как правильно использовать знаки "/" или "" или вовсе "//". Поэтому если вы сталкиваетесь с подобной ситуацией, помните и обращайте внимание на это.