java的File类'对象是否可序列化?

时间:2014-08-01 05:31:34

标签: java sockets serialization file-io serializable

我正在开发一个项目,它需要在网络上将目录信息从一个客户端发送到另一个客户端。所以告诉我,我可以通过发送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 class'字段感到困惑,即

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

读取File对象后服务器获取了哪些确切的信息?

1 个答案:

答案 0 :(得分:2)

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

有关详细信息,请阅读Java File API 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();
}