重写程序已经使用过的文件



我想知道是否有一种方法来确定是否有任何流在程序中打开?

我正在使用我的一些代码和另一些代码,我的目标是能够多次写入同一个文件,每次擦除并重写它。然而,我认为在某个地方,属于另一个组的代码可能忘记了关闭流,或者Java无法处理它,也许?它总是在文件的末尾写入,而不是在空白文件的开头。如果它已经被程序打开,它将不会被删除,我也无法重命名它。

如果这是一个打开的流问题,我想关闭流(我已经浏览了代码,似乎找不到打开的流)。或者如果Java不能处理它,是否有一个好的方法(除了使销毁方法),我能够重置/杀死对象被重新实例化?

或者有没有办法…将文件设置为空,然后删除它?或者我应该尝试打开文件,擦除它并将偏移量设置为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;
}

希望有帮助!

@John Detter,我已经尝试了其中的很大一部分,尽管这是一些很好的/有用的代码。

我通过在一个单独的线程中打开文件(当我知道我没有读/写/到它时)作为RandomAccessFile来解决它。我得到了文件的长度,然后调用raf.skipBytes(长度),它擦除了文件。还有一些其他奇怪的事情伴随着它,但它适合我。

相关内容

  • 没有找到相关文章

最新更新