Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java发送、接收和打印文件?_Java_Arrays_Sockets_File Transfer - Fatal编程技术网

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

如何用Java发送、接收和打印文件?,java,arrays,sockets,file-transfer,Java,Arrays,Sockets,File Transfer,所以,我在Stackoverflow上看到过几篇这样的文章,但是在从大约10篇文章中获取了资源之后,我完全搞糊涂了。事实上,我对Java还比较陌生,这并没有真正的帮助。因此,我的目标是获取一个文件,将其转换为字节数组,发送该文件,让客户端将其放入字节数组,然后将该字节数组转换为字符串 下面是相关的服务器代码,这是一个try/catch,您可以知道: System.out.println("Waiting for a client..."); // Start a server ServerSoc

所以,我在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,它将字节数组转换为字符串并打印出来。我尝试了网站和QA网站提供的几十种不同的技术,但它们都导致了这个错误。有没有关于这里的错误以及如何修复的想法?

许多错误:

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));
同样,它从不从输入流中读取任何内容。它创建一个任意大小的数组,用零填充,并尝试使用平台默认编码将其转换为字符串

我在客户机上得到一个java.lang.NullPointerException,它将字节数组转换为字符串并打印出来

这一行,可能是因为您没有发布异常的堆栈跟踪:

allMessagesTextBox.setText(new String(bytes));
这意味着allMessagesTextBox为空。不能对空引用调用方法


阅读Java IO教程,了解如何从流中读取字节。同时阅读,了解这是关于什么以及为什么它很重要。

请参阅:[教我]请尝试从分而治之的角度思考。您的问题可以细分为如何在Java中发送和接收“某物”?可以是字符串或字节数组。如何将文件读取到字节数组?如何在Java中将字节数组保存到文件中?这些问题中的每一个都已经得到了回答。然后你运用你作为开发人员的技能将答案组合成一个完整的解决方案。只有你能做到这一点,所以没有帮助。谢谢你告诉我出了什么问题,但是你能告诉我如何解决这个问题吗?我做到了:阅读IO教程了解如何从流中读取字节,阅读NPE上的帖子了解它们何时抛出,以及初始化变量的含义。