Перепишите файл, который программа уже использовала - PullRequest
0 голосов
/ 05 июля 2011

Мне было интересно, есть ли способ определить, открыты ли какие-либо потоки в программе?

Я использую часть своего кода и часть другого, и моя цель - иметь возможность писать водин и тот же файл несколько раз, стирая его и переписывая каждый раз.Тем не менее, я думаю, что где-то код, принадлежащий этой другой группе, возможно, забыл закрыть поток, или что Java не может справиться с этим, может быть?Он всегда пишет в конце файла, а не в начале пустого файла.Он не будет удален, и я не могу переименовать его, если он уже был открыт программой.

Если это проблема с открытым потоком, я хочу закрыть поток (который я прошел через код и не могукажется, найти открытый поток).Или, если Java не может справиться с этим, есть ли хороший способ (помимо создания методов уничтожения) для меня, чтобы иметь возможность сбрасывать / уничтожать объекты для повторного восстановления?

Или есть ли способ ... установитьфайл в ноль, и это стирает?Или я должен попытаться открыть файл, стереть его и установить смещение на 0?

любые советы будут хороши

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

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

Я решил эту проблему, открыв файл в отдельном потоке (когда я знал, что я не читаю / не пишу из него) в качестве файла RandomAccessFile. Я получил длину файла, затем назвал raf.skipBytes (length), и он стер файл. Есть некоторые другие странные вещи, которые сопровождают это, но это работает для меня.

0 голосов
/ 05 июля 2011

Вот хороший код, который может быть вам полезен:

public void writeToNewFile(String filePath, String data)
{
    PrintWriter writer;
    File file;
    try
    {
        file = new File(filePath);
        file.createNewFile();
        writer = new PrintWriter(new FileWriter(file));
        writer.println(data);
        writer.flush();
        writer.close();
     }catch(Exception e){e.printStackTrace();}
     writer = null;
     file = null;
     \\setting file & writer to null releases all the system resources and allows the files to be accessed again later
}

//this will write to end of file
public void writeToExistingFile(String filePath, String data)
{
    PrintWriter writer;
    File file;
    try
    {
        file = new File(filePath);
        if(!file.exists())
            file.createNewFile();
        writer = new PrintWriter(new FileWriter(file,true));
        writer.println(data);
        writer.flush();
        writer.close();
     }catch(Exception e){e.printStackTrace();}
     writer = null;
     file = null;
     \\setting file & writer to null releases all the system resources and allows the files to be accessed again later
}

public String[] readFile(String filePath)
{
    String data[];
    Iterator<String> it;
    ArrayList<String> dataHolder = new ArrayList<String>();
    BufferedReader reader;
    File file;
    try
    {
        file = new File(filePath);
        reader = new BufferedReader(new FileReader(file));

        int lines = 0;
        while(reader.ready())
        {
            lines++;
            dataHolder.add(reader.readLine());
        }

        data = new String[lines];
        it = dataHolder.iterator();
        for(int x=0;it.hasNext();x++)
            data[x] = it.next();

        reader.close();
     }catch(Exception e){e.printStackTrace();}
     reader = null;
     file = null;
     \\setting file & reader to null releases all the system resources and allows the files to be accessed again later
    return data;
}

public void deleteFile(String filePath)
{
    File file;
    try
    {
         file = new File(filePath);
         file.delete();
    }catch(Exception e){e.printStackTrace();}
    file = null;
}

public void createDirectory(String directory)
{
    File directory;
    try
    {
        directory = new File(directory);
        directoyr.mkDir();
    }catch(Exception e){e.printStackTrace();}
    directory = null;
}

Надеюсь, это помогло!

...