java的File类对象可以序列化吗?

Anu*_*hav 6 java sockets file-io serialization serializable

我正在开发一个项目,它需要将目录信息从一个客户端发送到网络上的另一个客户端。那么告诉我,我可以通过仅发送文件类对象来在另一个客户端上获取此信息吗?请解释一下您选择“是”或“否”的原因。

更新的问题

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

客户代码:-

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();

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

以下是服务器代码:-

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();

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

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

static private FileSystem fs = FileSystem.getFileSystem() //see javadoc for File
Run Code Online (Sandbox Code Playgroud)

服务器读取 File 对象后得到的具体信息是什么?

小智 3

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

有关更多详细信息,请阅读 Java 的File API 参考

代码示例

您可以通过以下代码来实现:

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();
}
Run Code Online (Sandbox Code Playgroud)