0

SharePoint に変換する必要がある HTML ヘルプ システムがあります。最も時間のかかる 2 つのプロジェクトは、ドキュメント リンクの変更とメタデータの収集です。しかし、このデータは簡単にアクセスできるので幸運です。各ファイルは HTML ドキュメントであり、以下のように単純化されています。

 <body>
   <!--- Metadata follows
   Procedure Name: my document
   Procedure Number: xxxxx
   Use: freeform text explaining when procdure is used
   Revision Date: xx/xx/xx
   By: responsible party for revision
   <!--- end metadata

   <h1>Procedure Name<\h1>
   <p>procedure background and narrative, with links, as needed, to other documents at \\documentation-server\path\document-name.html
 <\body>

適切な文字列を正常に抽出して操作できます。そのプロセスを自動化されたソリューションに取り入れようとしています。ただし、これはファイル I/O への最初の冒険であるため、次に何をすべきかについて少し混乱しています。

完璧な世界では、パスが与えられたら、パス内の各 *.html ファイルをステップ実行したいと思います。それを行うためのクラス/メソッドが見つからないようです。newInputStreamファイルへのアクセスを許可しnewOutpuStreamますが、パスとファイルのパラメーターを指定する必要があります。このFileVisitorインターフェイス、ファイル属性と対​​話し、削除/コピー/名前変更タイプの機能を実行するだけのようです。

これらをパス内の各ファイルをステップ実行し、それを開いて行ごとの解析を許可し、ファイルを閉じて次のファイルに移動して繰り返す単一の関数に結合するようなものはありますか?

私の他の考えは、ファイル名の配列を作成し、その配列を のファイル名パラメーターにフィードすることでしnewInputStreamた。

提案?

4

4 に答える 4

1

Java 7を使用している場合、FileVisitorインターフェースを使用すると、ファイルツリーを非常に簡単にウォークできます。たとえば、Javaチュートリアルを参照してください。

メソッドをオーバーライドvisitFileして、ファイルで必要な処理を実行できます。たとえば、(テストされていません)。

@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
    if (attr.isRegularFile() && file.getFileName().toString().endsWith(".html")) {
        Charset charset = Charset.forName("UTF-16");
        try (BufferedReader reader = Files.newBufferedReader(file, charset)) {
           String line;
           while ((line = reader.readLine()) != null) {
               System.out.println(line); //do what you need to do here
            }
         } catch (IOException x) {
             //Print / log the errror
         }
    }
    return CONTINUE;
}
于 2012-04-02T12:03:59.213 に答える
1
java.io.File file = new File("yourPath");
if(file.isDirectory())
    for(File f : file.listFiles(new YourFileFilter()))
       doYourReading(new FileInputStream(f));

と:

class YourFileFilter extends java.io.FileFilter{
    public boolean accept(File pathname) {
          return pathname.getName().toLowerCase().endsWith(".html");
    }
}

少なくとも、それが基本的な考え方です。例外処理はあなた次第です (;

于 2012-04-02T12:04:36.577 に答える
1

html パーサーが必要です - http://htmlparser.sourceforge.net/。次に、各ドキュメントをリンクすると、やりたいことが実行されます。

于 2012-04-02T12:05:43.917 に答える
1

少し直感に反するように思えるかもしれませんが、FileJava のオブジェクトはDirectoriesも表します。

次のようにして、ディレクトリであるかどうかを確認できます。

file.isDirectory()

そうである場合は、すべてのファイルを一覧表示し、それに応じて処理できます。

for(File f : file.listFiles()){
   handle(f);
}
于 2012-04-02T12:07:48.423 に答える