首页 > 解决方案 > Java - 将文件从客户端复制/粘贴到服务器出现错误 - UTF-8 编码问题打开文件

问题描述

我最近尝试使用此答案使用 Java 创建一个复制/粘贴应用程序,除了文件目录之外我没有进行太多更改。我创建了一个常规文本文件,其中写有“测试”。当我运行应用程序时,它会复制文件,但在 success_test.txt 中给我一个关于 utf-8 编码的错误,我不确定如何解决这个问题或导致问题的原因。我在 Intellij Ultimate 2019.2 的 Ubuntu 18.04 上运行它

这是服务器,客户端与答案中的几乎相同

服务器:

public class Server extends Thread {

public static final int PORT = 3332;
public static final int BUFFER_SIZE = 626;

@Override
public void run() {
    try {
        ServerSocket serverSocket = new ServerSocket(PORT);
        while (true) {
            Socket s = serverSocket.accept();
            saveFile(s);
        }
    } catch (Exception e) {
    }
}

private void saveFile(Socket socket) throws Exception {
    InputStream inputStream = socket.getInputStream();
    FileOutputStream fileOutputStream = new FileOutputStream("/home/user/Documents/success_test.txt");;

    byte[] byteArray = new byte[1024];
    System.out.println("Reading file from server...");
    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
    int bytesRead;
    while ((bytesRead = inputStream.read(byteArray)) != -1) {
        bufferedOutputStream.write(byteArray);
    }

    bufferedOutputStream.close();
    System.out.println("Writing file complete...");

}

public static void main(String[] args) {
    new Server().start();
}

}

当我尝试打开 success_test.txt 这就是我看到的

https://imgur.com/a/3rpvkiJ

UTF-8 错误

标签: javaencodingutf-8

解决方案


您正在将数据读入一个 1024 字节长的数组,然后将其写入文件。这意味着您的输出文件使用 NULL 字符填充到 1024 个字节。

你有你的 bytesRead 变量,所以你应该用它来只写那么多字节:

bufferedOutputStream.write(byteArray, 0, bytesRead);

推荐阅读