我有另一个问题。现在我正在写一个小程序,它在我的电脑和笔记本电脑上运行。这两个程序相互通信。我可以写字符串(就像聊天),我想发送文件。这个小聊天有效,但文件正在制作问题。 Wich让我有点疑惑,因为几天前我已经把它运行了。但现在它不起作用(不记得我改变了重要的事情)。不幸的是我无法撤消因为Eclipse已经关闭了。
所以我一直在寻找错误,但我几小时都找不到它。我希望你能帮助我。
情况:
我在我的电脑/笔记本电脑上选择一个文件并将其发送到我的笔记本电脑/电脑(我发送文本[字符串]的方式与文件一样,并且有效)。接收方应将文件保存在目录中(targetPath - 它在代码中的其他位置定义。它是我桌面上的文件夹)。所以我从“ObjectInputStream”获取文件作为对象并将其转换为“文件”:
if(msg instanceof File){ //msg is the object i got from the ObjectInputStream
//its a file
model.copyFileTo((File) msg);
}
这是制造麻烦的方法:
public void copyFileTo(File file) throws IOException{
System.out.println(file.getName());//this is just a test and it works. It prints out the name of the sended file
if(targetPath.toFile().exists()){
if(file.exists()){
Path temp = Paths.get(targetPath+"/"+file.getName());
if(!temp.toFile().exists()){
Files.copy( file.toPath(), temp, StandardCopyOption.REPLACE_EXISTING);
System.out.println("copied");
}else{
System.out.println("File already exists");
}
}else{
System.out.println("File doesnt exists");
}
}else{
System.out.println("targetPath doesnt exists!");
}
}
我没有成为错误,但它打印“文件不存在”,所以“if(file.exists())”出错了。如果我把这个部分剪掉了,那么程序就会在Files.copy(...)中挂起,我知道因为它没有打印出“复制”。
我希望你能帮助我,如果你需要更多信息就说出来。
答案 0 :(得分:0)
在源系统上,你会做这样的事情(Java 7):
Path path = Paths.get("C:\\MyFolder", "MyFile.bin");
byte[] fileContent = Files.readAllBytes(path);
// send fileContent to target system
在目标系统上,您可以:
// receive fileContent from source system
Path path = Paths.get("C:\\Where\\To\\Store\\File", "MyFile.bin");
Files.write(path, fileContent);
在Java 6或更低版本中,您将使用File
对象而不是Path
对象并自行复制字节。
答案 1 :(得分:0)
我遵循安德烈亚斯的建议
在源系统上,你会做这样的事情(Java 7):
Path path = Paths.get("C:\\MyFolder", "MyFile.bin");
byte[] fileContent = Files.readAllBytes(path);
// send fileContent to target system
在目标系统上,您可以:
Path path = Paths.get("C:\\Where\\To\\Store\\File", "MyFile.bin");
Files.write(path, fileContent);
在Java 6或更低版本中,您将使用File对象而不是Path对象并自行复制字节。
我只想为其他人写下我的代码:
当我收到输入时,会调用此部分:
if(msg instanceof Message){// Message is a self made class wich contains the byte[] as an object and the File/Path as an Object #
model.copyFileTo((byte[]) ((ChatMessage)msg).getMessage(), (File)((ChatMessage)msg).getName());
}
方法:
public void copyFileTo(byte[] bytes, File file) throws IOException{
if(targetPath.toFile().exists()){
Path temp = Paths.get(targetPath+"/"+file.getName());
if(!temp.toFile().exists()){
Files.write(temp, bytes);
System.out.println("Wurde kopiert");
}else{
System.out.println("File already exists");
}
}else{
System.out.println("targetPath doesnt exists!");
}
}
感谢Andreas。