如何使用Java发送,接收和打印文件?

时间:2018-06-29 16:45:23

标签: java arrays sockets file-transfer

因此,我在Stackoverflow上看到了几篇类似的文章,但是在从10篇文章中获取资源后,我完全感到困惑。而且我对Java还是比较陌生的事实并没有真正的帮助。因此,我的目标是获取文件,将其转换为字节数组,发送该文件,让客户端将其放入字节数组,然后将该字节数组转换为字符串。

因此,这是相关的服务器代码(就这样,您可以在try / catch中找到它):

System.out.println("Waiting for a client...");
// Start a server
ServerSocket server = new ServerSocket(3210);
// Listen for anyone at that port
Socket socket = server.accept();
System.out.println("A client has connected!");
DataOutputStream outputStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
// Get file
File file = new File("history.txt");
// Convert file to byte array
byte[] bytes = new byte[(int) file.length()];
// Send bytes
outputStream.write(bytes);
// Close everything down
socket.close();
outputStream.close();
server.close();

如果您阅读注释,您将对我认为/应该在客户端和服务器中完成的工作有一个基本的了解。这是客户端(再次被try / catch包围):

Socket socket = new Socket(desktopName, 3210);
// Get stream
DataInputStream inputStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
// Create a byte array
byte[] bytes = new byte[1024 * 16];
// Convert byte array to string
allMessagesTextBox.setText(new String(bytes));
inputStream.close();
socket.close();

并且当该代码在Eclipse中运行时,我在客户端上获得java.lang.NullPointerException的行,该行将字节数组转换为字符串并打印出来。我已经尝试了网站和质量检查网站提供的数十种不同技术,但是所有这些技术都导致我遇到此错误。关于这里有什么问题以及如何解决的任何想法?

1 个答案:

答案 0 :(得分:0)

许多错误:

byte[] bytes = new byte[(int) file.length()];
// Send bytes
outputStream.write(bytes);

这只会创建一个字节数组,然后将其写入。您永远不会从文件中读取任何字节。因此,数组中的所有字节的值都为0。

byte[] bytes = new byte[1024 * 16];
// Convert byte array to string
allMessagesTextBox.setText(new String(bytes));

同样,它永远不会从输入流中读取任何内容。它创建一个用零填充的任意大小的数组,并尝试使用平台默认编码将其转换为String。

  

我在客户端将java.lang.NullPointerException转换为字节数组并将其打印出来的那一行。

大概这行(因为您没有发布异常的堆栈跟踪):

allMessagesTextBox.setText(new String(bytes));

这意味着allMessagesTextBox为空。您不能在空引用上调用方法。

阅读What is a NullPointerException, and how do I fix it?,并阅读Java IO教程,以学习如何从流中读取字节。另请阅读this article on character encoding,以了解这是什么以及为什么它很重要。