我有从文件中读取的程序。现在我创建了另一个任务,旨在将此文件更新/写入相同的文件。我现在的问题是当我生成项目的可分发文件时,在运行期间尝试更新我的文件,它不会写/更新我的更改。如果我直接在我的IDE上运行它,它工作正常。这是我到目前为止做的:
private void tbleAddressMouseClicked(java.awt.event.MouseEvent evt) {
if(tbleAddress.getSelectedColumn()==3){
AddressUtil util = new AddressUtil();
List<AddressUtil> lists = util.getAddresses();
Address address = lists.get(tbleAddress.getSelectedRow());
if(tbleAddress.getValueAt(tbleAddress.getSelectedRow(), 0)!=null){
address.setRegion("\""+tbleAddress.getValueAt(tbleAddress.getSelectedRow(), 0).toString()+"\"");
}
lists.set(tbleAddress.getSelectedRow(), address);
try {
FileWriter fw;
fw = new FileWriter("./src/address.csv"); // This is where I doubt, if my **jar** file reads this directory
for(Address a:lists){
fw.append(a.getRegion);
fw.append(",");
fw.append(a.getAddressName());
fw.append("\n");
fw.flush();
}
fw.close();
} ...
我的 getAddresses 定义为:
public List<Address> getAddresses() {
List<Address> addresses = new ArrayList<>();
BufferedReader br = null;
InputStream in = this.getClass().getResourceAsStream("/address.csv");
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while((line = reader.readLine())!=null){
String[] result = line.split(",");
Address address = new Address();
address.setRegion(result[0]);
address.setAddressName(result[1]);
addresses.add(address);
}...
我的 address.csv 的格式为:
"Region I","Sample St., Sample Address"
"Region II","Sample St., Sample Address 2"
...
非常感谢任何帮助
答案 0 :(得分:0)
写入文件的问题很可能是由于您在定义FileWriter
时使用的相对路径。路径中的点表示&#34;当前工作目录&#34;因此,如果您的程序位于路径C:\ myProgram,并且您运行程序使其使用此路径作为工作目录,那么它将查找C:\ myProgram \ src \ address.csv
因此,根据程序的要求,相对路径可能是合适的,在这种情况下,您需要确定正确的路径是什么,并确保该文件存在于该位置,或者您可以使用其他一些机制来查找文件。
我还注意到您正在使用getResourceAsStream
为您的文件获取InputStream
。您应该知道,只有当您的程序的classpath上有该文件时,这才有效。