【问题标题】:Is java's File class' object serializable?java的File类的对象是可序列化的吗?
【发布时间】:2014-09-24 06:08:46
【问题描述】:

我正在做一个项目,它需要将目录信息从一个客户端发送到网络上的另一个客户端。所以告诉我,我可以通过仅发送 File 类的对象来在另一个客户端上获取此信息吗?请解释一下你是或否的原因。

更新问题

我正在发布我尝试过的代码......

客户代码:-

public class FileClient{
    public static void main(String str[]){
        try{
            Socket sock = new Socket("10.16.10.82",4000);

                    /* Socket sock = new Socket("127.0.0.1",4000); */ //for localhost 
            File f = new File("MyFile.txt");
            ObjectOutputStream os = new ObjectOutputStream(sock.getOutputStream());
            os.writeObject(f);
            os.flush();
            os.close();
            System.out.println("object sent");
        }
        catch(Exception ex){
            ex.printStackTrace();

        }

    }
}

以下是服务器代码:-

class FileServer{
    public static void main(String str[]){
        try{
            ServerSocket sock = new ServerSocket(4000);
            while(true){
                Socket cs = sock.accept();
                ObjectInputStream in = new ObjectInputStream(cs.getInputStream());
                File f = (File)in.readObject();
                System.out.println(f.isDirectory());
                System.out.println(f.length()+" bytes read");
            }
        }
        catch(Exception ex){
            ex.printStackTrace();

        }

    }
}

如果我在 localhost 上运行服务器,这可以正常工作,但是当我使用两台不同的机器时,一台用于客户端,另一台用于服务器,输出不同(它显示读取 0 字节)。这似乎是正确的,因为实际文件在远程服务器上不可用。我对 File 类的字段感到困惑,即

static private FileSystem fs = FileSystem.getFileSystem() //see javadoc for File

服务器在读取 File 对象后得到了什么确切的信息?

【问题讨论】:

  • 基于JavaDocs for File,是的。话虽如此,我非常不鼓励通过网络发送File,因为它与本地机器相关。最好设计自己的课程来携带您需要的信息 - 恕我直言
  • 另外,您为什么不直接使用ObjectOutputStream 并尝试将File 对象写入磁盘,看看发生了什么?
  • 非常感谢,我一定会试试的。为什么我不这么认为:-)
  • 更重要的是,您为什么不查看 Javdoc?就已经记录在案的问题在互联网上提问是没有意义的。完全是浪费时间。
  • 仅供参考,File 对象只不过是文件路径周围的薄包装。

标签: java sockets serialization file-io serializable


【解决方案1】:

是的,您可以使用File 类引用发送信息,因为它实现了Serializable 接口。

有关更多详细信息,请阅读 Java 的 FileAPI reference

代码示例

可以通过以下代码实现:

String sourcePathFilename = "path.txt";
try {
    File file = new File(sourcePathFilename);
    FileOutputStream fos = new FileOutputStream(String targetpath);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(file);
} catch (Exception e) {
    e.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多