Java - 如何使.jar文件使用外部.txt文件?

时间:2018-05-24 14:03:29

标签: java

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

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

当我尝试将其导出为“runnable jar file”时,我无法访问它。我在那里放了一个选项来显示一个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();
    }
}
}

由于

1 个答案:

答案 0 :(得分:1)

你可以在这里阅读:How to get the path of a running JAR file?

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

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

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