同じファイル上のFileOutputStreamを開くのにFileNotFoundExceptionは、Java NIOを使用して読み取ります

StackOverflow https://stackoverflow.com/questions/2146656

  •  23-09-2019
  •  | 
  •  

質問

私は、テキストエディタ読み書きについては、以下のとほぼ同じ用途コードことがあります。私は製作中のための小さなファイルを開くと、私はそれらを再度保存しようとすると、私はいつもこのエラーを取得します。本当に興味深いけれども、私のテキストエディタは、約600バイト以上を持つファイルに対して罰金を動作することである(それぞれの時間を変えるように見える)、私はここに複製することができていないことを行動ます。

私の現在の回避策は、そのような場合、<ファイルサイズのために1024バイト、および使用java.ioをチェックすることです。

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;

public class Test {
    public static void main(String[] args) {
        String text = null;
        try {
            FileInputStream fis = new FileInputStream("test.txt");
            FileChannel ifc = fis.getChannel();
            CharBuffer cb = Charset.forName("ISO-8859-15").newDecoder().
                    decode(ifc.map(FileChannel.MapMode.READ_ONLY, 0,
                    (int) ifc.size()));
            text = cb.toString();
            ifc.close();
            fis.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        try {
            FileOutputStream fos = new FileOutputStream("test.txt");
            OutputStreamWriter osw = new OutputStreamWriter(
                    fos, "ISO-8859-15");
            osw.write(text);
            osw.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

は、上記のコードでは、私は10キロバイトに4バイトからtest.txtの種々のサイズのために、このエラーが発生します。

java.io.FileNotFoundException: test.txt (The requested operation cannot be perfo
rmed on a file with a user-mapped section open)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at Test.main(Test.java:23)
缶誰もが私が間違ってやっていると、まだNIOを読みながら、私は仕事にこれを取得する方法を説明?

役に立ちましたか?

解決

スティーブンC には、バッファのマッピングを解除するためにあなたに言っています。

しかし、ここでOPEN STILLにリンクである(2002年から) MappedBybeBuffer.unmapメソッドのリクエストます。

あなたがそれらを試してみることがありので、それは、提案され、いくつかの回避策があります。

他のヒント

あなたが明示的FileChannel.map(...)コールでマッピングされたことを地域のマップを解除する必要があります。

map(...)のJavadocは、このことを言います

  

一度確立マッピングは、それを作成するために使用されたファイルチャネルに依存しません。チャネル開閉、特に、マッピングの有効性には影響を及ぼさない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top