Java 无法将文件复制到新路径
Java copying files to a new path doesn´t work
我还有一个问题。现在我正在写一个小程序,它可以在我的电脑和笔记本电脑上运行。这两个程序相互通信。我可以写字符串(就像聊天一样)并且我想发送文件。这个小聊天有效,但文件现在出现问题。这让我有点疑惑,因为几天前我已经 运行 了。但现在它不起作用(不记得我改变了重要的事情)。不幸的是我无法撤消,因为 Eclipse 已经关闭。
所以我一直在寻找错误,但几个小时后都找不到。我希望你能帮助我。
情况:
我在我的 pc/laptop 中选择一个文件并将其发送到我的 laptop/pc(我发送文本 [Strings] 的方式与发送文件的方式相同并且它有效)。接收方应将文件保存在一个目录中(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(...),我知道这是因为它没有打印出“已复制”。
在源系统上,你会做这样的事情(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
对象并自行复制字节。
我听从了 Andreas 的建议
On the source system, you'd do something like this (Java 7):
Path path = Paths.get("C:\MyFolder", "MyFile.bin");
byte[] fileContent = Files.readAllBytes(path);
// send fileContent to target system
On the target system, you'd do:
Path path = Paths.get("C:\Where\To\Store\File", "MyFile.bin");
Files.write(path, fileContent);
In Java 6 or lower, you'd use a File object instead of the Path object and copy bytes yourself.
我只是想为其他人写下我的代码:
当我收到输入时调用此部分:
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!");
}
}
感谢安德烈亚斯。
我还有一个问题。现在我正在写一个小程序,它可以在我的电脑和笔记本电脑上运行。这两个程序相互通信。我可以写字符串(就像聊天一样)并且我想发送文件。这个小聊天有效,但文件现在出现问题。这让我有点疑惑,因为几天前我已经 运行 了。但现在它不起作用(不记得我改变了重要的事情)。不幸的是我无法撤消,因为 Eclipse 已经关闭。
所以我一直在寻找错误,但几个小时后都找不到。我希望你能帮助我。
情况:
我在我的 pc/laptop 中选择一个文件并将其发送到我的 laptop/pc(我发送文本 [Strings] 的方式与发送文件的方式相同并且它有效)。接收方应将文件保存在一个目录中(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(...),我知道这是因为它没有打印出“已复制”。
在源系统上,你会做这样的事情(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
对象并自行复制字节。
我听从了 Andreas 的建议
On the source system, you'd do something like this (Java 7):
Path path = Paths.get("C:\MyFolder", "MyFile.bin");
byte[] fileContent = Files.readAllBytes(path);
// send fileContent to target system
On the target system, you'd do:
Path path = Paths.get("C:\Where\To\Store\File", "MyFile.bin");
Files.write(path, fileContent);
In Java 6 or lower, you'd use a File object instead of the Path object and copy bytes yourself.
我只是想为其他人写下我的代码:
当我收到输入时调用此部分:
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!");
}
}
感谢安德烈亚斯。