java - 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();
}
}
}
谢谢
解决方案
正如您可以在此处阅读的:如何获取正在运行的 JAR 文件的路径?
此行返回 jar 文件的路径。包括罐子名称。
DeliveryPackage.class.getProtectionDomain().getCodeSource().getLocation().toString()
你应该删除它。我提到的问题显示了如何做到这一点。