我正在使用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页面上解释了此异常是:
尝试写入NW时抛出NonWritableChannelException。
未开放写作的渠道。
但我仍然无法解释原因。请帮我弄清楚为什么我遇到这个例外。
谢谢 :)
最佳答案
“尝试写入未打开以进行写入的通道时,将引发NonWritableChannelException。”
您使用openFileInput
...打开了文件/通道,正在打开该文件/通道以读取而不是写入。如果要锁定该文件,则必须使用openFileOutput
或其他方式打开它以进行写入。