首页 > 解决方案 > Java - 如何使 .jar 文件使用外部 .txt 文件?

问题描述

我有文件“recipients.txt”,其中包含您可能已经猜到的收件人列表。我需要不时更新它,因此我计划将它放在与我导出的 .jar 文件相同的目录中以便这样做。

目前,我将它放在我的 Eclipse 工作区中我的项目的“bin”目录中。我使用 FileReader 将文件加载到变量中。

当我尝试将其导出为“可运行的 jar 文件”时,我无法访问它。我在那里放了一个选项来显示一个带有应用程序正在查找的路径的 JOptionPane,这很奇怪。

该窗格告诉我它正在寻找文件“\Desktop\JarFile.jarrecipients.txt”。

是的,没错,就是少了一个“\”。

那么我做错了什么,我该怎么做呢?我很确定我做错了,在这种情况下我该怎么做呢?我怎样才能拥有可以定期更新的文件?我将如何将其全部导出以使其正常工作?

编码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class DeliveryPackage {
public String recipientList="No Recipients";
public String recipientFileName = "recipients.txt";
public String recipientFilePath = DeliveryPackage.class.getProtectionDomain().getCodeSource().getLocation().toString().replace("file:/","").replace("/", "\\") + recipientFileName;
public File recipientFile = new File(recipientFilePath);
public String fileNotFoundMessage = "File not found";
private String messageContents = "";
private String messageSubject = "";

public void setMessageSubject(String subject) {
    messageSubject = subject;
}

public String getMessageSubject() {
    return messageSubject;
}

public void setMessageContents(String message) {
    messageContents = message;
}

public String getMessageContents() {
    return messageContents;
}

public DeliveryPackage() {
    loadRecipients();
}

public String getRecipients(){
    return recipientList;
}

public String getRecipientFileName() {
    return recipientFileName;
}

public File getRecipientFile(String recipientFilePath) {
    File recipFile = new File(recipientFilePath);
    return recipFile;
}

public String getFileNotFoundMessage() {
    return "File not found";
}

public void loadRecipients() {

    if(recipientFile.exists() && !recipientFile.isDirectory()) { 
        String recipient;
        recipientList = "";
        try {
            FileReader fileReader = new FileReader(recipientFile);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            while((recipient = bufferedReader.readLine()) != null) {
                if (recipient.trim().length() > 0) {
                    if (recipientList == "") {
                        recipientList = recipient;
                    } else {
                        recipientList = recipientList + "," + recipient;
                    }
                }
            }   
            // Always close files.
            bufferedReader.close();
        } catch (Exception e) {

        }       
    } else {
        recipientList = getFileNotFoundMessage();
    }
}
}

谢谢

标签: java

解决方案


正如您可以在此处阅读的:如何获取正在运行的 JAR 文件的路径?

此行返回 jar 文件的路径。包括罐子名称。

DeliveryPackage.class.getProtectionDomain().getCodeSource().getLocation().toString()

你应该删除它。我提到的问题显示了如何做到这一点。


推荐阅读