如何判断是否在Android中打开文件进行读/写?

时间:2011-08-17 20:14:30

标签: java android io android-file

这是一段代码片段,我打开一个文件,用于同时写两个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”。

我需要确保我没有打开一个文件,用于读取/写入/删除当前打开以供另一个实例写入的文件。如何确保我不修改当前打开的文件?

3 个答案:

答案 0 :(得分:2)

  

我需要确保不打开文件进行读/写/删除   目前已开放供另一个实例撰写。

另一个例子是什么意思?

  • 如果这是您的应用程序中的另一个线程,请使用读/写方法的同步。
  • 如果这是您自己创建的另一个进程(应用程序,服务等),请使用独占FileLock来协调进程之间的文件读/写操作。
  • 如果这是您无法控制的另一个进程(即由其他人创建),您可以通过检查/proc/…/fd/树来检查当前是否打开了文件,如同lsof实用程序一样。但是,这通常要求您具有root权限。

希望能给你一个线索。如果您需要进一步的帮助,请与我们联系。

答案 1 :(得分:1)

FileObserver可能会对您有所帮助。

答案 2 :(得分:-1)

您可以执行空检查

if (null == fis)
// then create output stream

如果先前打开了fis,它将不会为null,并且您最终不会打开另一个输出流。