FileOutputStream не работает с запланированной задачей

У меня есть файл jar, который работает правильно при двойном щелчке по нему, но когда я планирую задачу для его запуска, FileOutputStream не будет работать.

Он правильно выполняет другие задачи, такие как отправка электронной почты и подключение к маршрутизатору, но не может писать в файл.

Я извлек самый простой код, который дает эту ошибку:

package testjar;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestJar {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        FileOutputStream fout = new FileOutputStream("TestJar.log", true);
        fout.write("TestJar ok.".getBytes());
    }
}

Я попытался запланировать, вызвав файл .bat, который запускает банку, а также сделать .exe из банки с помощью Launch4j: он все делает хорошо при нажатии, но когда я вызываю его из запланированной задачи, он не записывает файл. (Я работаю над Window7 Professional)


person T30    schedule 04.03.2014    source источник
comment
Вы проверили разрешение для пользователя (создатель задачи)?   -  person Parth Soni    schedule 04.03.2014
comment
Пробовал на другом компе со всеми правами... Ничего не меняется.   -  person T30    schedule 04.03.2014
comment
Вы видите исключение или просто не видите файл TestJar.log в папке? Если второе, убедитесь, что вы смотрите в нужную папку, так как вы не указываете полное имя файла, а текущая папка зависит от того, как вы запускаете приложение. Или попробуйте указать полное имя файла.   -  person AnatolyG    schedule 04.03.2014


Ответы (1)


Как предложил AnatolyG, он работает, указывая полный путь к журналу! (Интересно, почему... но это работает, и этого достаточно!)

Итак, это пример того, как заставить работать приведенный выше код:

public static void main(String[] args) throws FileNotFoundException, IOException, URISyntaxException {
    CodeSource codeSource = TestJar.class.getProtectionDomain().getCodeSource();
    File jarFile = new File(codeSource.getLocation().toURI().getPath());
    String jarDir = jarFile.getParentFile().getPath();
    FileOutputStream fout = new FileOutputStream(jarDir+"/JarTest.log", true);
    fout.write(jarDir.getBytes());
}

Спасибо, АнатолийГ!

person T30    schedule 04.03.2014