【发布时间】:2020-07-13 14:08:22
【问题描述】:
我无法让我的可运行 jar 文件写入外部文本文件。我的意图是将数据存储在与可运行 jar 位于同一文件夹中的文本文件中(不在 jar 内);每行是一个数据集,新数据集附加在现有文件的末尾。 当我从 Eclipse 运行代码时,我尝试了几种不同的方法,它们都可以完美运行,但是一旦将其导出到可运行的 jar(也通过 Eclipse),它就不再更改文本文件。
这是我尝试过的事情:
-
OutputStreamWriter
public void writeData(String dataset) { try { URL url = getClass().getClassLoader().getResource("datasets.txt"); OutputStream os = new FileOutputStream(url.getFile(), true); OutputStreamWriter ow = new OutputStreamWriter(os); String line = "\n" + dataset; ow.append(line); ow.close(); os.close(); } catch (IOException e) { e.printStackTrace(); } } -
缓冲写入器
public void writeData(String dataset) { try { URL fileUrl = getClass().getClassLoader().getResource("datasets.txt") BufferedWriter writer = new BufferedWriter(new FileWriter(fileUrl.getPath(), true)); writer.newLine(); writer.write(dataset); writer.close(); } catch (IOException e) { e.printStackTrace(); } } -
文件编写器
public void writeData(String dataset) { try { URL url = getClass().getClassLoader().getResource("datasets.txt"); FileOutputStream fos = new FileOutputStream(url.getFile(), true); FileWriter out = new FileWriter(getFilePath(), true); out.append(dataset); out.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } }
一开始读取文件也给我带来了一些麻烦,但我让它与 InputStreamReader 一起工作,添加代码以防万一
private void readData() {
InputStream is = getClass().getClassLoader().getResourceAsStream("datasets.txt");
InputStreamReader fr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(fr);
String line = null;
while((line = br.readLine())!= null) {
dataVec.add(dataset); ...
我以前从来没有做过这样的事情,所以我很感激任何提示为什么这些方法不起作用或任何可能有帮助的提示,在此先感谢!
编辑: 根据我得到的关于为什么我的方法不起作用的解释,我决定实现一个文件选择器以允许用户选择他们想要使用的文件,而不是尝试使用相对于 jar 位置的固定文件。这样我就避免了必须找到相对路径的麻烦,并且可以选择处理包含不同数据集的多个单独文件。
【问题讨论】:
标签: java file executable-jar