首页 > 解决方案 > Java - 在 res 文件夹中写入对象而不是在 bin 中写入

问题描述

我在将对象作为文件资源写入/读取时遇到问题。

项目结构

我从Main.java类中运行代码,并且我想将一个对象写入/读取到users.txt文件中。我要写入/读取的对象是TryStructureObject,它只是封装了一个 1 元素数组并实现了对象写入所需的 Serializable 接口。

package Main;

import java.io.Serializable;
import java.util.ArrayList;

public class TryStructure implements Serializable
{
    private static final long serialVersionUID = 1L;

    private ArrayList<Integer> a = new ArrayList<Integer>();

    public TryStructure()
    {
        a.add(5);
    }

    public String getStructure()
    {
        return a.toString();
    }
}

该类从文件中Main.java写入和读取 obj 。users.txt

package Main;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.URISyntaxException;
import java.net.URL;

public class Main
{
    public static void main(String[] args)
    {
        String res = "/res/users.txt";

        write(res);
        read(res);
    }

    private static void write(String resName)
    {
        TryStructure list = new TryStructure();

        FileOutputStream fos;
        ObjectOutputStream oos;

        URL resource = Main.class.getClass().getResource(resName);
        File file = null;

        try
        {
            file = new File(resource.toURI());

            fos = new FileOutputStream(file);
            oos = new ObjectOutputStream(fos);

            System.out.println("WRITING: " + list.getStructure());

            oos.writeObject(list);

            oos.close();
            fos.close();
        }
        catch (IOException e)
        {
            System.err.println("users.txt not found !");
        }
        catch (URISyntaxException e)
        {
            e.printStackTrace();
        }
    }

    private static void read(String resName)
    {
        FileInputStream fos;
        ObjectInputStream oos;

        URL resource = Main.class.getClass().getResource(resName);
        File file = null;

        try
        {
            file = new File(resource.toURI());

            fos = new FileInputStream(file);
            oos = new ObjectInputStream(fos);

            System.out.println("READING: " + ((TryStructure) oos.readObject()).getStructure());

            oos.close();
            fos.close();
        }
        catch (IOException e)
        {
            System.err.println("users.txt not found !");
        }
        catch (ClassNotFoundException e)
        {
            System.out.println("AA");
        }
        catch (URISyntaxException e)
        {
            e.printStackTrace();
        }
    }
}

如果我运行代码,我会得到以下输出:

WRITING: [5]
READING: [5]

如果我然后检查 user.txt 文件,我发现它是空的,我在bin/res/user.txt. 我不明白为什么它只更新 bin 文件夹中的文件而不更新 res 文件夹中的文件,为什么会这样?我想写入那个特定的文件。

谢谢你。

标签: javaresourcesobjectoutputstream

解决方案


推荐阅读