0

如果之前已经发布过,我很抱歉。

我要做的是向位于我项目中的一个包中的文件写入和读取一个简单的字符串。在源代码包中,我有一个名为“资源”的包。myfile.txt在这里,我想读取一个名为newmyfile.txt. 只是简单地读取和存储 CSV 数据。

我创建了一个阅读器,如下所示:

public BufferedReader getFileReader(String fileNameWithExtension, String sourcePackage) {
        try {
            String file = "/" + sourcePackage + "/" + fileNameWithExtension;
            BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(file)));
            return br;
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
            return null;
        }
    }

这在我的 Mac 上运行良好。阅读这个我发现我必须使用 File.separator 才能让它在所有操作系统上工作。所以我改变了这个,但它仍然不起作用。/有人说,在使用相对路径和其他地方时,无论操作系统如何,相对路径总是以开头../。作为Java文件存储的新手,我很困惑。

读写文件的方法也很多,不知道该选择什么方法,为什么。

对我来说,读取和创建文件的最佳方式是保存一个长字符串或一组字符串?

4

2 回答 2

1

我忙于其他事情,但现在在您的帮助下,找到了适用于 mac 和 windows 的解决方案。

出于某种奇怪的原因,String file = "/" + sourcePackage + "/" + fileNameWithExtension;这是唯一可以在我的 Mac 上阅读的东西。突然(没有进行代码更改)它也开始在 Windows 上工作。我不知道为什么。所以现在获得读者的工作代码是:

public BufferedReader getFileReader(String fileNameWithExtension, String sourcePackage) {
        try {
            String file = "/" + sourcePackage + "/" + fileNameWithExtension;
            BufferedReader br = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(file)));
            return br;
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
            return null;
        }
    }

为了写入资源文件夹中的文件,我使用了:

public BufferedWriter getFileWriter(String fileNameWithExtension, String sourcePackage) {
        Writer output = null;
        File file = new File("src" + File.separator + sourcePackage + File.separator + fileNameWithExtension);
        try {
            output = new BufferedWriter(new FileWriter(file));            
            return (BufferedWriter) output;
        } catch (IOException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

可悲的是,获得的方式Reader与不同Writer,但它有效。

于 2012-11-15T10:44:43.110 回答
0

关键是绝对路径总是以“/”开头。相对路径不得以“/”开头。这至少是给你造成问题的部分原因。

对于其余的,你说“它不起作用”。但是什么不起作用?

于 2012-11-09T09:28:40.237 回答