【问题标题】:When you serialize and save an object in java, Where is the file created?当你在java中序列化并保存一个对象时,文件是在哪里创建的?
【发布时间】:2011-08-12 18:10:31
【问题描述】:

当你在java中保存一个对象时(使用serialize),文件是在哪里创建的?

例如如果你使用了这个方法http://www.rgagnon.com/javadetails/java-0075.html

【问题讨论】:

  • 放哪里就放哪里。
  • (我猜他在考虑相对路径……)
  • +1 用于通过链接更新您的问题。
  • 逗号之前的问题的第一部分实际上并不相关。问题只是关于 new FileOutputStream() 的作用。
  • 如果有人正在寻找它:您可以在您放入的字符串中指定您的目录作为文件名。您可以使用“C:\\name.ser”(或任何其他扩展名)来代替“name.ser”

标签: java file serialization location


【解决方案1】:

如果您使用 ObjectOutputStream 进行序列化并将其包装在 FileOutputStream 周围,那么对象将进入该文件。

例如(来自 ObjectOutputStream Javadoc):

FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());

oos.close();

这将在 java 应用程序的工作目录中创建一个文件“t.tmp”。

关于工作目录... 如果您使用 IDE 来启动您的应用程序,那么工作目录取决于 IDE 将编译后的类放在哪里以及它如何运行您的应用程序。

您可以使用以下代码打印工作目录:

File f = new File(".");
System.out.println(f.getAbsolutePath());

“。”表示“当前”目录。

【讨论】:

  • 也许可以在 where 上找到该工作目录的附加提示;)
  • 所以它应该在项目文件夹中,假设它是创建的?是否存在未创建文件的情况?文件是否隐藏?当我使用 windows 搜索查找文件时,我只看到包含该文件的代码。
  • “工作目录”通常是您运行程序时所在的目录,如果您从命令行运行它。
  • 现在我只需要弄清楚为什么文件没有被写入。
  • @rioneye 如果它没有被写入,你将得到一个说明原因的 IOException。更有可能它正在编写中,而你还没有找到它。
【解决方案2】:

通常是您将其保存到的任何位置。 File 是如何创建的?


更新

从链接中,似乎代码正在创建一个File,方法是从代表名称的String 实例化文件,没有路径。其他人已经解决了这个问题。

相反,我想强调以下几点。 不要在那里创建文件。如果它们是临时文件,请将它们放在临时目录中,如另一个答案中所述。如果它们是程序稍后可能需要访问的文件,请将它们放在稳定且可重现的路径中,例如user.home 的子目录。

例如(伪代码,未经测试)

String name = "data.ser";
String[] pkgs = {"com", "our", "main"};
File f = new File(System.getProperty("user.home");
for (String pkg : pkgs) {
    f = new File(f, pkg);
}
f = new File(f, name);
...

【讨论】:

    【解决方案3】:

    如果您的意思是使用 java.io.Serializable 进行标准序列化,则没有“标准”位置。您宁愿创建一个装饰任意 OutputStream 的 ObjectOutputStream 实例。

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(someObject);
    oos.close();
    

    在本例中,对象被写入内存。如果您使用 FileOutputStream,那么您可以将您的对象序列化为任意文件。


    编辑:

    在您的链接中,生成的文件将存储在“当前工作目录”中,这是您使用 java ... 命令执行 Java 应用程序的目录。

    【讨论】:

    • 如果我使用的是eclipse,那么“当前工作目录”会是我运行的项目的文件夹吗?
    • 我对 NetBeans 的经验更丰富,但是是的,我认为它是项目文件夹,位于最顶层。
    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多