2

いくつかの xml 入力ファイルを処理し、結果としてさらに xml ファイルを書き込むアプリケーションを実装しました。

Raspberry Pi で実行するには、この jar を配置する必要があります。

PuTTY または WinSCP を使用して、PC から Raspberry Pi に入力ファイルを転送します。

.xml ファイルのすべての名前を filename.xml として指定したパスのディレクトリから読み取り、それらをリストに追加するメソッドがあります。次に、リストの位置 0 で inputFile を処理する他のメソッドを呼び出します。

inputFile は、「パス + ファイル名」で示されるファイルです。

リストの位置 0 から inputFile を処理した後、inputFile を削除し、次にリストから名前を削除します。

inputFiles はいつでも送信される可能性があるため、私のアプリは永続的に実行する必要があります。 これが最初の問題です。jar を永続的に実行する方法がわかりません。

もう 1 つの問題は、読み取るファイルがなくなった場合です。jar がまだ実行中の場合、ファイルがなくなるため、エラーがスローされるためです。

Raspberry Pi で設定したディレクトリに xml ファイルがある場合にのみアプリを実行する必要があると思いますが、それを実現するためのホットな方法がわかりません...アプリを実行するだけのトリガーまたは何かがあるはずですxml ファイルがラズベリーパイに送信されるとき。

4

1 に答える 1

0

filenameあなたが言ったように、着信ファイルがパスを持つ変数にあるとしましょうpath。このファイルが次のように存在するまで待つことができます。

File f = new File(path+filename);
while(true){ //infinite loop for infinite executing
    while(!f.exists()){
        Thread.sleep(10000); //long time is ok (10 seconds)
    }
    readFile(f); //your code to read file
    //I recommend to delete or rename file to let f vaiable
}

フォルダーに使用するには、これを使用できます。

File f = new File(path);
while(true){ //infinite loop for infinite executing
    while(f.listFiles().length==2){ //contains only . and .. "files"
        Thread.sleep(10000); //long time is ok (10 seconds)
    }
    readFolder(f.listFiles()); //your code to read folder (array of files)
}

そして、追加されたフォルダーに新しいファイルがあることを確認するための少し良い方法:

File f = new File(path);
int lastCount=2; //or =f.listFiles().length to skip change at start
while(true){ //infinite loop for infinite executing
    while(f.listFiles().length==lastCount){
        Thread.sleep(10000); //long time is ok (10 seconds)
    }
    readFolder(f.listFiles()); //your code to read folder (array of files)
    lastCount=f.listFiles().length; //setting we have just know how many files are there
}

テストされていませんが、.xml. フィルタが原因で問題が発生することはほとんどありません。

于 2015-07-15T20:21:56.767 に答える