导出jar时不包括文本和图像文件

时间:2019-07-06 07:22:50

标签: java eclipse javafx jar export

我创建了一个项目,该项目在执行时会使用图像文件以及文本文件。在将项目导出到可运行的jar之前,文本文件和图像文件都在我的项目文件夹中,但是当我从命令行运行jar时,由于程序键入要从文本文件读取而导致的filenotfound异常。我解压缩了罐子以进行仔细检查,但图像和文本文件不存在。

package application;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

import javafx.collections.FXCollections;

public class Data {
    private static Data instance=new Data();
    private Map<String,String> saveEntries = new HashMap<>();
    private static String fileName = "ResponseData";

public static Data getInstance() {
    return instance;
}

public void exitSave() throws IOException {
    Path path = Paths.get("ResponseData");
    Iterator<Map.Entry<String, String>> iter = saveEntries.entrySet().iterator();
    BufferedWriter bw = Files.newBufferedWriter(path);
    try {
        while(iter.hasNext()) {
            Map.Entry<String, String> entry = iter.next();
            bw.write(String.format("%s\t%s", entry.getKey(),entry.getValue()));
            bw.newLine();
        }
    } catch (IOException e) {
        new FileNotFoundException("Error when saving data");
    }finally {
        if(bw!=null)
            bw.close();
    }
}



public void updatedSaveEntry(String input, String response) {
    saveEntries.put(input, response);
}

public Map<String,String> getSaveEntries(){
    return this.saveEntries;
}

public void setEntry(Map<String,String> map) {
    Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
    while(iter.hasNext()) {
        Map.Entry<String, String> entry = iter.next();
        saveEntries.put(entry.getKey(), entry.getValue());
    }
}


public void loadEntries() throws IOException{
    saveEntries = FXCollections.observableHashMap();
    Path path = Paths.get(fileName);
    BufferedReader br = Files.newBufferedReader(path);
    String line;
    try {
        while((line=br.readLine())!=null&&!line.trim().isEmpty()) {
            String[] parts = line.split("\t");
            saveEntries.put(parts[0], parts[1]);
        }
    }finally {
        if(br!=null) {
            br.close();
        }
    }

}

}

Eclipse Runnable Jar Export

Project Folder

2 个答案:

答案 0 :(得分:0)

您的程序正在尝试从本地文件系统而不是从jar文件读取文件。因此,确实不应将其包含在jar文件中。该程序在执行程序的当前工作目录中期望该文件,并且如果您在Eclipse中运行项目或执行导出的jar文件,则该文件可能会有所不同。

答案 1 :(得分:0)

如果您同时正在读取和写入到文件,则不适合在其他应用程序中找到该文件,如另一个答案中所述:您应该将数据持久保存在外部位置。 / p>

但是,通常将只读资源文件(例如图像)保存在jar中。如果您想对图像以及其他资源保留这种方法,那么您将面临两个问题:

  1. 使用Export Runnable Jar功能使Eclipse将文件包含在jar中。

  2. 在jar中查找文件

包含文件

最简单的方法可能只是将文件放在源文件夹中。在您的项目中,执行New -> Source Folder,为其命名(例如“ resources”),然后将文件移到该位置。通常,如果重新运行导出,则文件应位于jar中。

查找文件

jar文件的访问方式不同。请参阅对Reading a resource file from within jar的接受的答案。请注意,您无需在路径中包含资源文件夹的名称,因为此文件将放置在jar的根目录中(您可以通过解压缩来验证它)。