nonwritablechannelException

nonwritablechannelException

我正在使用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或其他方式打开它以进行写入。

10-06 09:10