为什么我的FileOutputStream将文件保存在错误的位置?

时间:2018-05-14 18:53:32

标签: java fileoutputstream

我有一个MO.data的文件夹,我想保存一个对象。

  try{
     FileOutputStream t = new FileOutputStream(String.valueOf(GameReader.class.getResourceAsStream("MO.data")));
     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(t));

        out.writeObject(map);
        out.close();
        System.out.println("File saved and closed!");
        return true;

    }catch(IOException ioe){
        System.err.print(ioe);
        return false;
    }

我有:src/files/GameReader.class and src/files/MO.data

我正在上课的课程位于src / logic / saver.class

但是,它会将其保存到文件中:java.io.BufferedInputStream@11b1857c in src/java.io.BufferedInputStream@11b1857c

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您正在构建输出流,然后采用其字符串表示并以某种方式假设它是有效路径。而是获取此资源的URI,它将为您提供绝对路径。

URL url = GameReader.class.getResource("MO.data");
String.valueOf(url.getPath()+url.getFile());

修改

对不起,我错过了您正在尝试到捆绑资源。它将是只读的,您必须将其放入resources/文件夹,而不是src/。如果要存储某些会话数据,可能需要使用临时文件夹System.getProperty("java.io.tmpdir")或用户主页System.getProperty("user.home")或当前工作目录(不要添加任何路径)。然后,您将文件名添加到此路径并保存在那里。有时需要混合方法,当您读取jar中捆绑的已保存模板,然后将修改后的数据保存到其他位置。