1

我正在使用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 开发者页面上,他们解释这个异常是:

尝试写入未打开写入的通道时会引发 NonWritableChannelException。

但我仍然无法解释为什么。请帮我弄清楚为什么我会遇到这个例外。

谢谢 :)

4

1 回答 1

1

“尝试写入未打开写入的通道时会引发 NonWritableChannelException。”

您使用 ... 打开文件/通道openFileInput,打开它是为了读取而不是写入。如果您想锁定文件,则必须使用openFileOutput... 或者也可以打开它以进行写入。

于 2013-05-19T11:28:53.537 回答