这是一段代码片段,我打开一个文件,用于同时写两个FileOutputStream
。
FileOutputStream fis = null;
File openFile = new File("myfile");
try {
fis = new FileOutputStream(openFile);
Toast toast = Toast.makeText(getApplicationContext(), "Opened", Toast.LENGTH_SHORT);
toast.show();
}
catch (FileNotFoundException e1) {
Toast toast = Toast.makeText(getApplicationContext(), "FileNotFound", Toast.LENGTH_SHORT);
toast.show();
}
// now try to open it again
FileOutputStream fis2 = null;
try {
fis2 = new FileOutputStream(openFile);
Toast toast = Toast.makeText(getApplicationContext(), "Opened2", Toast.LENGTH_SHORT);
toast.show();
}
catch (Exception e1) {
Toast toast = Toast.makeText(getApplicationContext(), "Exception: " + e1.getMessage(), Toast.LENGTH_SHORT);
toast.show();
}
我最终得到两条Toast
条消息,“已打开”和“已打开2”。
我需要确保我没有打开一个文件,用于读取/写入/删除当前打开以供另一个实例写入的文件。如何确保我不修改当前打开的文件?
答案 0 :(得分:2)
我需要确保不打开文件进行读/写/删除 目前已开放供另一个实例撰写。
另一个例子是什么意思?
FileLock
来协调进程之间的文件读/写操作。 /proc/…/fd/
树来检查当前是否打开了文件,如同lsof实用程序一样。但是,这通常要求您具有root权限。希望能给你一个线索。如果您需要进一步的帮助,请与我们联系。
答案 1 :(得分:1)
FileObserver可能会对您有所帮助。
答案 2 :(得分:-1)
您可以执行空检查
if (null == fis)
// then create output stream
如果先前打开了fis,它将不会为null,并且您最终不会打开另一个输出流。