0

だから私は次のようなものを実行するプログラムを持っています

public class SHandler extends Handler { 
    File lmpFile;

プログラムの後半で:

lmpFile = new File("Stuff.zip"); // This should create a file called "stuff.zip" in the present directory
OutputStream fos = new FileOutputStream(lmpFile); // Fill the file with whatever

次に、メインから呼び出します

 S.SHandler SpecialSH = new S.SHandler(args);
 //use the object for whatever
 SpecialSH.delFile();

Delfile は次のように作成され、クラス内のメソッドです。

public void delFile() {
    lmpFile.deleteOnExit();
    lmpXMLFile.deleteOnExit();
}

私の知る限り、このプログラムはローカル マシン (Windows 7 Enterprise) で正しく動作しますが、開発ボックスでこれを実行すると、プログラムがいたるところにプルする大量のファイルが投げられます。実行パスは /usr/data/dev/Handler であり、「stuff.zip」(およびそこから抽出されたファイル) を /etc/cron.d に配置していますが、それらを削除しようとしても削除できません。

このプログラムは、RHEL6 を実行しているマシン上の cron ジョブによって呼び出される bash スクリプトを介して呼び出されています。これを助けることができる人は誰でも、私の不朽の愛と感謝を得るでしょう.

編集:bashスクリプトは単純です:

export JAVA_HOME=/usr/data/java/current
export PATH=$JAVA_HOME/bin:$PATH

/usr/data/java/current/bin/java -jar /usr/data/dev/Handler/Handler.jar

Tl;DR: ファイルは Windows で正常に動作しますが、RHEL6 が cron を呼び出すと、ファイルが本来あるべきでない場所に行き着いてしまいます。プログラムでこれを処理するにはどうすればよいですか?

4

2 に答える 2

2

ワーキングディレクトリのようです/etc/cron.d/(実行パスが違います)。

相対パス ( java.io.Fileを使用する場合) は、作業ディレクトリに対して相対的です。ファイルを別のディレクトリに配置する場合は、絶対ファイル パスを使用します/path/to/stuff.zip(先頭のスラッシュに注意してください)。

于 2012-08-22T17:30:13.977 に答える
0

おそらく、これらのファイルは、削除が発生したときに閉じられていないか、または他のプログラムがそれらを使用していますか?

于 2012-08-22T18:13:03.740 に答える