1

ジャボリューションを使用している方は、使い方を教えてください。どのスニペット コードもとても役に立ちます。

ここに私の現在のコードがあります:

public static void mergeAllFilesJavolution2()throws FileNotFoundException, IOException {
    String fileDir = "C:\\TestData\\w12";
    File dirSrc = new File(fileDir);
    File[] list = dirSrc.listFiles();
    long start = System.currentTimeMillis();

    String outFile = fileDir + "\\..\\merged.txt";
    File file2 = new File(outFile);
    //file2.createNewFile();
    FileChannel fc2 = (new RandomAccessFile(file2, "rw")).getChannel(); 

    for(int j=0; j<list.length; j++){
        int chr;
        String srcFile = list[j].getPath();

        File file = new File(srcFile);
        FileChannel fc = (new FileInputStream(file)).getChannel(); 
        MappedByteBuffer buf = fc.map(MapMode.READ_ONLY, 0, file.length());
        UTF8ByteBufferReader inFile= new UTF8ByteBufferReader().setInput(buf);

        MappedByteBuffer buf2 = fc2.map(MapMode.READ_WRITE, file2.length(), file.length());
        UTF8ByteBufferWriter outPut= new UTF8ByteBufferWriter().setOutput(buf2);

        while((chr=inFile.read()) != -1) {
            outPut.write(chr);
        }
        outPut.close();
        inFile.close();
    }
    System.out.println(System.currentTimeMillis()-start);
}

しかし、それは私に例外を与えます:

abc.filedivision.FileMergeTest.mergeAllFilesJavolution2(FileMergeTest.java:100) の abc.filedivision. FileMergeTest.main(FileMergeTest.java:27)

正しい方向へのガイダンスをいただければ幸いです。

4

1 に答える 1

1

私の推測では、ここで不平を言っていると思います (そのため、エラーのあるコード行を確認することが重要です)

FileChannel fc2 = (new FileOutputStream(file2, true)).getChannel(); 
MappedByteBuffer buf2 = fc2.map(MapMode.READ_WRITE, 0, file2.length());

この例外は、チャネルを使用して読み取ろうとしても読み取れない場合にスローされます。

"rw"、"rws"、または "rwd" モードで RandomAccessFile を使用する場合、READ_WRITE モードでのみチャネルを開くことができます。

于 2011-06-17T10:57:15.377 に答える