繁体   English   中英

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

[英]Is java's File class' object 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个字节读取)。 看起来是正确的,因为远程服务器上没有实际文件。 我对文件类'字段感到困惑,即

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

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

是的,您可以使用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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM