FileWriter и файл JAR - не удается найти ресурс - PullRequest
3 голосов
/ 06 января 2012

Я недавно написал программу.Класс обработки файлов выглядит следующим образом:

package smartest.eu;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Processor {
    private BufferedWriter out;
    private BufferedReader in;

    // this method opens the file for reading!
    public void openWriter() throws Exception {
        if (out == null) {
            try {
                out = new BufferedWriter(new FileWriter(new File("src/personaldata.txt")));
            }
            catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        else {
            throw new Exception("Writer opened already");
        }
    }

    // this method opens the reader
    public void readWriter() throws Exception {
        if (in == null) {
            try {
                in = new BufferedReader(new FileReader("src/personaldata.txt"));
                in.mark(65538);
            }
            catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        else {
            throw new Exception("Reader already opened");
        }
    }

    // this method reads the file line by line outputting a string as the result
    public String readText() throws Exception {
        String answer1 = "";
        if (in != null) {
            try {
                if ((answer1 = in.readLine()) != null) {
                    answer1 += "\n";
                }
                else {
                    answer1 = "No more data!\nThe stream will be read from the beginning!\n";
                }
            }
            catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        else {
            throw new Exception("Open file for reading at first");
        }

        return answer1;
    }

    // this method writes the given string to a file
    public void writeText(String a) throws Exception {
        if (out != null) {
            out.write(a);
            out.flush();
        }
        else {
            throw new Exception("Open file for writing at first");
        }
    }

    public void resitStream() {
        try {
            in.reset();
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

Структура каталога processor.jar:

1) manifest
2) personaldata.txt
3) smartest/eu/*.class

Но когда я делаю файл JAR, он не может найти файл (дает "Файл не найден, исключение ").Как я мог это исправить?PS Не могли бы вы также упомянуть кое-что о проблеме - почему .jar-файлы недоступны внутри jar-файлов?

1 Ответ

5 голосов
/ 06 января 2012

Линия

new FileReader("src/personaldata.txt")

пытается открыть файл personaldata.txt в подкаталоге src текущего каталога. Текущий каталог - это каталог, в котором вы находитесь, когда запускаете команду java в командной строке. Итак, если вы находитесь в c:\ и запускаете java -jar the/path/to/myJar.jar, он будет искать файл в каталоге c: \ src \ personaldata.txt.

Файл, таким образом, используется для доступа к файловой системе. Не ресурсы внутри банки. Чтобы загрузить ресурс из classpath, вы должны использовать

Processor.class.getResourceAsStream("/personaldata.txt")

Посмотрите на javadoc этого метода , чтобы понять, как он работает.

Обратите внимание, что запись в файл в банке невозможна.

...