当前位置: 首页 > 知识库问答 >
问题:

Java-从客户端复制/粘贴文件到服务器获取错误-UTF-8编码问题打开文件

梁丘扬
2023-03-14

我最近试图用这个答案用Java创建一个复制/粘贴应用程序,除了文件的目录,我没有改变太多。我创建了一个常规文本文件,里面写着“测试”。当我运行应用程序时,它会复制文件,但会给我一个关于utf-8编码的错误,success_test.txt,我不确定如何解决这个问题,也不知道是什么导致了这个问题。我正在Intellij终极2019.2的Ubuntu 18.04上运行这个

这里的服务器和客户端与答案基本相同

服务器:

公共类服务器扩展线程{

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();
}

}

当我试图打开成功测试时。这就是我看到的

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

共有2个答案

冀越
2023-03-14

正如其他人所提到的,您有一个逻辑错误:您忽略了循环中的bytesRead。但是,您可以通过使用文件来消除该错误以及大多数其他错误的可能性。复制而不是编写自己的保存代码

try (InputStream inputStream = socket.getInputStream()) {
    Files.copy(inputStream, 
        Paths.get("/home/user/Documents/success_test.txt"));
}
邢勇
2023-03-14

您正在将数据读入一个1024字节长的数组,然后将其写入一个文件。这意味着您的输出文件被填充为1024字节,其中\00是空字符。

你有字节读取变量,所以你应该用它只写那么多字节:

bufferedOutputStream.write(byteArray, 0, bytesRead);
 类似资料:
  • 我试图从客户端复制文件到服务器,在Java,像这样: 客户: 服务器: 当我跑步时,我得到: 但什么都没发生。这是我第一次使用客户机服务器,我不确定自己出了什么问题。 请帮帮忙。谢谢你。

  • 我使用Java/Jsp开发了一个web应用程序,该应用程序运行在带有Tomcat 8的Ubuntu14.04 LTS服务器上,下面的UTF-8编码问题与部分符号§apperas有关。 在服务器端输入的任何章节符号§都将转换为§,我不知道为什么。 简单系统输出:

  • 我有字节数组,它放在InputStreamReader中,用它做一些操作。 JVM有默认的cp1252编码,但是我转换成字节数组的文件有utf-8编码。此外,这个文件有德语umlauts。当我把字节数组放在InputStreamReader中时,java会将元音解码为错误的符号。例如,ürepression为。我试着把“utf-8”和charset.forname(“utf-8”).newdeco

  • 问题内容: 我想将一些文件上传到HTTP服务器。基本上,我需要的是对服务器的某种POST请求,其中包含一些参数和文件。我看到了仅上传文件的示例,但没有找到如何也传递其他参数的示例。 什么是最简单,免费的解决方案?有人有我可以学习的文件上传示例吗?我已经搜寻了几个小时,但是(也许只是那几天)找不到我真正需要的东西。最好的解决方案是不涉及任何第三方类或库的东西。 问题答案: 通常,你会用来触发HTTP

  • 我想知道是否有人能帮忙,我很难将UTF-8字符发布到SagePay。数据库是MySQL,带有数据库字符集utf8和数据库排序规则utf8_general_ci。数据库连接字符串使用useUnicode=true 所有发布到数据库的数据都存储为UTF-8,所有查询的数据都显示为UTF-8,但当字符串编码如下时: 然后发到SagePay,他们会收到一个来自国际字符所在位置的乱码字符串。如果字符串中不包

  • 我有一个这样的项目: 和pom.xml,如下所示: 运行mvn包后,它在root/target文件夹中创建META-INF和WEB-INF文件夹,并将.war文件放入其中。 打包完成后,我希望maven也将一个WEB-INF文件夹从target复制到根(TestArt)。有没有办法实现?