2

我已经实现了一个应用程序,它处理一些 xml 输入文件并写入更多的 xml 文件作为结果。

我必须把这个罐子放在树莓派上运行。

我使用 PuTTY 或 WinSCP 将输入文件从我的 pc 传输到 Raspberry Pi。

我有一个从目录中读取的方法,该目录的路径我将 .xml 文件的所有名称指定为 filename.xml 并将它们添加到列表中。然后我调用其他方法来处理列表中位置 0 上的 inputFile。

inputFile 是由“路径+文件名”表示的文件。

从列表中的位置 0 处理 inputFile 后,我删除 inputFile,然后从列表中删除名称。

我的应用程序应该永久运行,因为 inputFiles 可以随时发送。 这是第一个问题:我不知道如何让我的 jar 永久运行。

另一个问题是当没有更多文件要读取时,因为如果 jar 仍在运行,则会抛出错误,因为没有更多文件。

我想只有当我在 Raspberry Pi 上设置的目录中有 xml 文件时,我才需要我的应用程序运行,而且我不知道如何让它发生......应该有一个触发器或其他东西让我的应用程序只运行当 xml 文件被发送到树莓派时。

4

1 回答 1

0

假设传入的文件是变量filenamepath如您所说的那样。我们可以等到这个文件像这样存在:

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 回答