Android:nonwritablechannelException和ClosedChannelException

时间:2013-05-19 10:26:15

标签: java android

我正在使用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   没有开放写作的频道。

但我还是无法解释原因。请帮我弄清楚为什么我遇到这个例外。

谢谢:)

1 个答案:

答案 0 :(得分:1)

  

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

您使用openFileInput打开文件/频道...正在打开它以便阅读而不是写作。如果您想对文件进行锁定,则必须使用openFileOutput来打开它以进行写入...或者也可以。