Переименование файла RandomAccessFile

у меня есть RAF с именем data.bin и временный RAF с именем temp.bin.

        data = new RandomAccessFile("data.bin","rws");
        temp = new RandomAccessFile("temp.bin","rws");

временный файл в основном представляет собой файл data.bin, но я изменяю информацию в нем. Итак, как только я закончу изменять временный файл, как мне изменить имя temp.bin на data.bin и удалить старый data.bin?

я видел некоторые вещи о переименовании файлов с помощью .renameTo() и прочее, но это относится к RandomAccessFile. и я не мог найти такой метод для RAF


person MadeInJapan    schedule 15.05.2013    source источник


Ответы (4)


RandomAccessFile не предназначен для замены класса File.

Он был разработан, чтобы позволить читать письмо только более или менее хорошо.

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

person Thihara    schedule 15.05.2013
comment
так что я просто делаю? Файл fdata = новый файл (data.bin); Файл ftemp = новый файл (temp.bin); ftemp.renameTo(fdata); ftemp.удалить(); - person MadeInJapan; 15.05.2013
comment
Если вы переименуете его, не нужно удалять, я думаю. - person Thihara; 15.05.2013

Закройте RAF и используйте java.nio.file.Files.move, чтобы переименовать временный файл. File.renameTo имеет недостаток. Если ему не удастся переименовать файл, вы никогда не узнаете, почему, поскольку он просто возвращает true или false. Files.move выдает исключение IOException в случае сбоя.

person Evgeniy Dorofeev    schedule 15.05.2013

У меня была такая же проблема. Я сделал что-то вроде этого:

data.close();
temp.close();
File tempfile = new File("c:/.../temp.bin");
File datafile = new File("c:/.../data.bin");
tempfile.renameTo(datafile);

Для получения дополнительной информации: http://www.tutorialspoint.com/java/io/file_renameto.htm

person Francisco Cabral    schedule 05.08.2013
comment
Вам нужно удалить файл данных, прежде чем переименовать его в «temp»? - person Thomas W; 05.08.2013
comment
Я так не думаю, но этот код просто перестал работать здесь.-. Я сейчас в замешательстве. В нем говорится, что файл не закрыт, но я закрыл его с помощью data.close() и temp.close()... Я попытался закрыть канал, но никаких изменений не произошло. Теперь мне нужна помощь и с этим ккккк - person Francisco Cabral; 05.08.2013

Целью RandomAccessFile является чтение/запись информации. Для обработки имен файлов, существования и т. д. вы должны использовать класс File.

В вашем случае вы должны сделать что-то вроде этого:

File d = new File("data"); // Declare your data RAF through File
RandomAccessFile data = new RandomAccessFile(d,"rws");

public void foo(){
    File t = new File("temp"); // Declare your temp RAF through File
    RandomAccessFile temp = new RandomAccessFile(t,"rws");
    //TODO data RAF alteration
    data.close();
    d.delete(); //First delete data File, just in case
    temp.close();
    File f = new File("data");
    t.renameTo(f);
}
person Lautaro Paskevicius    schedule 18.06.2017