2015-07-18 3 views
4

Попытка переименовать имя каталога и имя файла.переименование файла при переименовании каталога

try 
    { 
     File dir = new File("DIR"); 
     dir.mkdir(); 
     File file1 = new File(dir,"myfile1.txt"); 
     file1.createNewFile(); 
     File file2 = new File(dir,"myfile2.txt"); 
     file2.createNewFile(); 

     dir.renameTo(new File("myDIR"));    
     System.out.print(file1.renameTo(new File(dir,"myf1.txt"))); 
    } 
    catch(IOException ie) 
    { 

    } 

Однако только каталог успешно переименован, а не имя файла.
Эти операции не могут выполняться одновременно?

ответ

4

Это связано с тем, что ваши dir, file1 и file2 указывают на старый путь.

После этих линий выполняются,

File dir = new File("DIR"); 
dir.mkdir(); 
File file1 = new File(dir,"myfile1.txt"); 
file1.createNewFile(); 
File file2 = new File(dir,"myfile2.txt"); 
file2.createNewFile(); 

они будут пути, на которые ссылаются переменными,

dir = "DIR" // Exists 
file1 = "DIR\myfile1.txt" //Exists 
file2 = "DIR\myfile2.txt" //Exists 

После выполнения,

dir.renameTo(new File("myDIR"));    

дорожки, на которые ссылаются переменные все те же,

dir = "DIR" // Doesn't exist anymore because it's moved. 
file1 = "DIR\myfile1.txt" // Doesn't exist anymore because it's moved along with dir. 
file2 = "DIR\myfile2.txt" // Doesn't exist anymore because it's moved along with dir. 

Так что, когда вы звоните,

System.out.print(file1.renameTo(new File(dir,"myf1.txt"))); 

Вы звоните renameTo() на файл, который не существует и в директории, которая не существует. Поэтому он обязательно потерпит неудачу.

Даже если вы звоните .exists() метод по любому из dir, file1 или file2, он будет возвращать только false.

0

Не так. После того, как вы переименовали каталог, объекты file1 и file2 все еще указывают на старый путь к файлу до остальных. Вам нужно установить их в «новые» файлы в переименованном каталоге.

1

Я нашел этот вопрос очень интересным! Всегда имеет значение последовательность программы.

try 
{ 
    File dir = new File("DIR"); 
    dir.mkdir(); 

Здесь рельс указывает на местоположение в файловой системе.

File file1 = new File(dir,"myfile1.txt"); 
    file1.createNewFile(); 
    File file2 = new File(dir,"myfile2.txt"); 
    file2.createNewFile(); 

Когда вы переименуете его, это означает, что каталог указывает на другое место.

dir.renameTo(new File("myDIR")); 

Вы пытаетесь переименовать файл, который указывает на место, устаревшее.

System.out.print(file1.renameTo(new File(dir,"myf1.txt"))); 
} 
catch(IOException ie) 
{ 
    System.out.println(ie); 
} 

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

try 
{ 
    File dir = new File("DIR"); 
    dir.mkdir(); 

    File file1 = new File(dir,"myfile1.txt"); 
    file1.createNewFile(); 
    File file2 = new File(dir,"myfile2.txt"); 
    file2.createNewFile(); 
    System.out.print(file1.renameTo(new File(dir,"myf1.txt")));   

    dir.renameTo(new File("myDIR")); 
} 
catch(IOException ie) 
{ 
    System.out.println(ie); 
} 

Я проверил код!