java的File类的对象是可序列化的吗?
Posted
技术标签:
【中文标题】java的File类的对象是可序列化的吗?【英文标题】:Is java's File class' object serializable? 【发布时间】: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 forFile
,是的。话虽如此,我非常不鼓励通过网络发送File
,因为它与本地机器相关。最好设计自己的课程来携带您需要的信息 - 恕我直言
另外,您为什么不直接使用ObjectOutputStream
并尝试将File
对象写入磁盘,看看发生了什么?
非常感谢,我一定会试试的。为什么我不这么认为:-)
更重要的是,您为什么不查看 Javdoc?就已经记录在案的问题在互联网上提问是没有意义的。完全是浪费时间。
仅供参考,File
对象只不过是文件路径周围的薄包装。
【参考方案1】:
是的,您可以使用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();
【讨论】:
以上是关于java的File类的对象是可序列化的吗?的主要内容,如果未能解决你的问题,请参考以下文章