переименование файла при переименовании каталога

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

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 голоса | спросил Pradeep 18 J000000Saturday15 2015, 21:15:14

2 ответа


0

Это потому, что ваш 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.

ответил Codebender 18 J000000Saturday15 2015, 21:39:49
0

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

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

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

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

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

    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);
}

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

ответил ganeshvjy 18 J000000Saturday15 2015, 21:40:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132