0

編集: children はディレクトリの配列です。このコードは、各ディレクトリに入り、リストされているすべてのファイルを配列websにロードするために、この配列をループします。次に、各ファイルに対して、 readFile 関数がファイルを読み取ることになっています。

私のコードは次のとおりです。

for (File cat: children) {
    File[] webs = cat.listFiles();
    System.out.println("  Indexing category: " + cat.getName());
    for (File f: webs) {                    
        Web w = readFile(f);                
       // Do things with w  
    }   
}   

次のエラーが表示されます。

org.htmlparser.util.ParserException: Error in opening a connection to 209800.webtrec
209801.webtrec
     ...     
422064.webtrec
422071.webtrec
422087.webtrec
422089.webtrec
422112.webtrec
422125.webtrec
422127.webtrec
;
java.io.IOException: File Name Too Long
    at java.io.UnixFileSystem.canonicalize0(Native Method)
at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:172)
at java.io.File.getCanonicalPath(File.java:576)
at org.htmlparser.http.ConnectionManager.openConnection(ConnectionManager.java:848)
at org.htmlparser.Parser.setResource(Parser.java:398)
at org.htmlparser.Parser.<init>(Parser.java:317)
at org.htmlparser.Parser.<init>(Parser.java:331)
at IndexGenerator.IndexGenerator.readFile(IndexGenerator.java:156)
at IndexGenerator.IndexGenerator.main(IndexGenerator.java:101)

そのディレクトリにそれらのファイルが表示されないので、奇妙です。

ありがとう!

EDIT2 :これは readFile 関数です。ファイルの内容を文字列にロードして解析します。実際には、ファイルは html ファイルです。

private static Web readFile(File file) {
    try {           
        FileInputStream fin = new FileInputStream(file);
        FileChannel fch = fin.getChannel();

        // map the contents of the file into ByteBuffer
        ByteBuffer byteBuff = fch.map(FileChannel.MapMode.READ_ONLY, 
                0, fch.size());

        // convert ByteBuffer to CharBuffer
        // CharBuffer chBuff = Charset.defaultCharset().decode(byteBuff);
        CharBuffer chBuff = Charset.forName("UTF-8").decode(byteBuff);
        String f = chBuff.toString();

        // Close imputstream. By doing this you close the channel associated to it
        fin.close();            

        Parser parser = new Parser(f);          
        Visitor visit = new Visitor();
        parser.visitAllNodesWith((NodeVisitor)visit);           
        return new Web(visit.getCat(), visit.getBody(), visit.getTitle());

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
4

1 に答える 1

0

さて、ついに私は解決策を得ました。

それは非常にばかげたエラーでした。そのディレクトリには、前のタスクで削除したすべての空の html ファイルの名前を含むファイルがありました。それで、私はそれを解析しようとしましたが、パーサーはそれをhtmlファイルではなくURLのように解釈しました(タグがなく、多くのポイントがないため...)。そのフォルダーには何百万ものファイルがあるため、ファイルを簡単に見つけることができませんでした。

于 2012-05-30T11:39:08.823 に答える