我想知道是否有一种方法来确定是否有任何流在程序中打开?
我正在使用我的一些代码和另一些代码,我的目标是能够多次写入同一个文件,每次擦除并重写它。然而,我认为在某个地方,属于另一个组的代码可能忘记了关闭流,或者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(长度),它擦除了文件。还有一些其他奇怪的事情伴随着它,但它适合我。