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!");
    }
}

感谢安德烈亚斯。