【发布时间】: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