我正在开发一个项目,它需要在网络上将目录信息从一个客户端发送到另一个客户端。所以告诉我,我可以通过发送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对象后服务器获取了哪些确切的信息?
答案 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();
}