Проблемы с работой файлов во время выполнения в исполняемом jar - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть рабочий код (по крайней мере, в Eclipse), в котором я работаю с некоторыми файлами: у меня есть файл .dot, который я записываю в некоторый текст, поэтому я могу прочитать его, чтобы создать график. Затем я сохраняю график в изображение .png, которое я отображаю на рамке.

Моя проблема: в исполняемом файле .jar я не могу получить доступ к этим файлам, а также - если я знаю это правильно - я даже не могу изменить время выполнения em. Поэтому я попытался работать с потоками. Я могу получить доступ к файлу .dot, например:

$InputStream fileStream = this.getClass().getResourceAsStream("/graf.dot");$

Но я понятия не имею, как я могу написать в него. Я нашел OutputStreamWriter , но он также требует пути, по которому я не могу получить доступ, как будто я получил доступ к InputStream .. Я также борюсь с чтением текста из файла и созданием файла .png ... Может пожалуйста, помогите мне? Можно ли вообще работать с этими файлами во время выполнения?

У меня была та же проблема с доступом к фоновому изображению рамки, но я нашел решение:

$URL bgPath = this.getClass().getResource("/background.jpg");
panel = new JLabel(new ImageIcon(bgPath));$

Так что я действительно надеюсь, что существует какое-то подобное решение для файлов, с которыми я работаю ..

private void createGraph() throws IOException { 
    /* Creating the graph into "graf.dot" file.
     * The format is in DOT language.
     */
    String fileName = "src/main/resources/graf.dot";
    InputStream fileStream = this.getClass().getResourceAsStream("/graf.dot");
    BufferedReader br = new BufferedReader(new InputStreamReader(fileStream));
    /* Here I write the content into *graph_string**/
    br.close();
    try {
        FileOutputStream outputStream = new FileOutputStream(fileName);
        OutputStreamWriter writer = new OutputStreamWriter(outputStream);
        //FileWriter writer = new FileWriter(fileName);
        writer.write(graph_string);
        writer.close();
    }catch (IOException e) {
        System.out.println("Error writing into file");
    }finally {
        drawGraph();            
    }
}

private void drawGraph() throws IOException {   
    /*
     * Reading the graph from file for visualization
     */
    String fileName = "src/main/resources/graf.dot";
    InputStream fileStream = this.getClass().getResourceAsStream("/graf.dot");
    BufferedReader br = new BufferedReader(new InputStreamReader(fileStream));      
    File file = new File("src/main/resources/graf.dot");
    String str="";
    try {
       str = FileUtils.readFileToString(file, "UTF-8");
    } catch (IOException e) {
        System.out.println("Errorrr reading from file.");
    }
    MutableGraph g = Parser.read(str);  
    Graphviz.fromGraph(g).render(
            Format.PNG).toFile(new File("src/main/resources/graph.png"));
    BufferedImage background = ImageIO.read(new File("src/main/resources/graph.png"));
    panel = new JLabel(new ImageIcon(background));          
...
}
...