2014-10-22 3 views
0

Возможно ли скопировать содержимое файла в контейнер, а затем удалить файл мгновенно, поэтому, по сути, я делаю снимок файла, но не сохраняя его содержимое в другом временном файле а в объекте JavaСкопируйте файл в объект, затем удалите файл

ПСЕВДОКОД/код, что я пытаюсь сделать

final File localPushFile = new File("testfile.txt"); 

if(!(localPushFile.exists()) 
{ 
    FileReader filestream = new FileReader(localPushFile); 
    Object a = filestream  //object variable will store snapshot of the file I am trying to copy 
    deletefile(localPushFile) //method that will delete the file as soon as a snapshot is taken 
} 

Я предполагаю, что я не могу использовать BufferedReader как только действует как временный буфер?

+1

Можете ли вы описать проблему, которая привела вас искать такое решение? Это звучит как проблема xy для меня. – Andreas

+0

Я жду файл, когда я его получу, я сразу же должен захватить его содержимое и сразу удалить файл. – lboyel

+1

Как насчет вместо чтения и удаления файла (который может использовать много памяти и может привести к потере данных, если процесс сбоев), мы копируем файл в каталог temp с меткой времени, прикрепленной к имени файла? Вам было бы интересно такое решение? – Andreas

ответ

1

Да, это возможно. Однако, чтобы предотвратить ошибки и случайные проблемы, вам необходимо прочитать весь файл из потока и затем закрыть поток перед его удалением.

+0

Что хранит файл? – lboyel

+1

Зависит от того, что содержит ваш файл. Если это текст, вы можете сохранить его в строке. Если это какой-то другой вид данных, вы можете вставить его в массив байтов, как предлагает Андреас. Если у вас есть контроль над программой, которая создает файл, вы можете сериализовать объект Java в файл и десериализовать его на другом конце. –

1

Ниже приведен пример чтения содержимого файла в массив байтов, а затем удаления файла.

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 

public class ReadFileIntoByteArray { 
    public static byte[] getContentsAndDeleteFile(File file) throws IOException { 
     byte[] data = Files.readAllBytes(file.toPath()); 
     file.delete(); 
     return data; 
    } 
} 

Примечание: данные будут потеряны, когда поток умирает в неподходящий момент, и что процесс потерпит неудачу как размер файла увеличивается

+0

какой поток вы имеете в виду? – lboyel

Смежные вопросы