0

プログラムでストリームが開いているかどうかを判断する方法があるかどうか疑問に思っていましたか?

私は自分のコードと別のコードのいくつかを使用しています。私の目標は、同じファイルに複数回書き込み、消去して毎回書き直すことができるようにすることです。ただし、どこかで、この別のグループに属するコードがストリームを閉じるのを忘れているか、Java がそれを処理できないのではないかと思います。空のファイルの先頭ではなく、常にファイルの最後に書き込みます。プログラムによって既に開かれている場合、削除されず、名前を変更できません。

開いているストリームの問題である場合は、ストリームを閉じたいと思います (コードを調べたところ、開いているストリームが見つからないようです)。または、Java がそれを処理できない場合、(destroy メソッドを作成する以外に) 再インスタンス化するオブジェクトをリセット/強制終了できる良い方法はありますか?

または、おそらく...ファイルをnullに設定して消去する方法はありますか?または、ファイルを開いて消去し、オフセットを 0 に設定する必要がありますか?

どんなヒントでもいいでしょう

4

2 に答える 2

0

@John Detter、私はすでにそのかなりの部分を試しましたが、それはいくつかの良い/役立つコードです。

別のスレッドでファイルを開くことで解決しました(読み取り/書き込みを行っていないことがわかっている場合) RandomAccessFile. ファイルの長さを取得し、raf.skipBytes(length) を呼び出して、ファイルを消去しました。それに付随する他のいくつかの奇妙なことがありますが、それは私にとってはうまくいきます。

于 2011-07-06T20:09:09.720 に答える
0

あなたに役立つかもしれないいくつかの良いコードがあります:

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

これが役に立ったことを願っています!

于 2011-07-05T18:38:36.800 に答える