有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可分发文件启动时,如何写入文件?

我有一个从文件中读取的程序。现在我创建了另一个任务,目标是更新/写入相同的文件。我现在的问题是,当我生成我的项目的可分发的文件时,在运行期间并尝试更新我的文件时,它不会写入/更新我的更改。如果我直接在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();
    } ...

MygetAddresses的定义如下:

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);
        }...

我的地址。csv的形式如下:

"Region I","Sample St., Sample Address"
"Region II","Sample St., Sample Address 2"
...

非常感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    写入文件的问题很可能是由于定义FileWriter时使用的相对路径造成的。路径中的点表示“当前工作目录”,因此,如果您的程序位于路径C:\myProgram,并且您运行的程序使用此路径作为工作目录,那么它将查找C:\myProgram\src\address。csv

    因此,根据程序的要求,相对路径可能是合适的,在这种情况下,您需要确定正确的路径,并确保文件存在于该位置,或者您可以使用其他机制来查找文件

    我还注意到,您正在使用getResourceAsStream获取文件的InputStream。您应该知道,只有当文件在程序的classpath上可用时,这才有效