我正在使用FileLock
,但我不知道为什么我总是会见nonwritablechannelException exception
:
public static List<String> readFromFile(Context ctx, String filename) {
try {
FileInputStream fis = ctx.openFileInput(filename);
// lock this file
FileLock lock = fis.getChannel().tryLock(); // Exception here
// unlock this file
lock.release();
return null;
} catch (Exception e) {
Log.i(TAG, "Cannot read file");
e.printStackTrace();
}
return null;
}
当我从文件写入时遇到另一个异常:异常ClosedChannelException
public static boolean saveToFile(Context ctx, List<String> lst, String filename) {
try {
FileOutputStream fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
// lock this file
FileLock lock = fos.getChannel().lock();
PackageObject obj = new PackageObject(lst);
ObjectOutputStream writer = new ObjectOutputStream(fos);
writer.writeObject(obj);
writer.close();
// unlock this file
lock.release(); // Exception at this line
fos.close();
return true;
} catch (Exception e) {
Log.i(TAG, "Cannot write file");
e.printStackTrace();
}
return false;
}
在Android Developer页面上,他们解释了这个例外:
尝试写入时会抛出NonWritableChannelException 没有开放写作的频道。
但我还是无法解释原因。请帮我弄清楚为什么我遇到这个例外。
谢谢:)
答案 0 :(得分:1)
“尝试写入未打开的通道时会抛出NonWritableChannelException。”
您使用openFileInput
打开文件/频道...正在打开它以便阅读而不是写作。如果您想对文件进行锁定,则必须使用openFileOutput
来打开它以进行写入...或者也可以。