Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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_File - Fatal编程技术网

java:检查服务器是否有特定的文件?

java:检查服务器是否有特定的文件?,java,file,Java,File,我有一个服务器(从客户端)向客户端发送请求的文件。我想做的是,如果服务器端不存在该文件,则打印输出并在两端出错 例如,客户端从服务器请求blahblahblah.txt,但服务器没有。服务器将打印“error.notexist”,但客户端也将在其一侧打印“error.notexist” 我的文件传输工作得很好,但如果有办法处理这个错误那就太好了。如果在服务器中键入了错误的输入,则可以使用If语句很好地处理它,但客户端只是等待一个文件(这很有意义,因为没有发送任何内容)。现在,在服务器端 File

我有一个服务器(从客户端)向客户端发送请求的文件。我想做的是,如果服务器端不存在该文件,则打印输出并在两端出错

例如,客户端从服务器请求blahblahblah.txt,但服务器没有。服务器将打印“error.notexist”,但客户端也将在其一侧打印“error.notexist”

我的文件传输工作得很好,但如果有办法处理这个错误那就太好了。如果在服务器中键入了错误的输入,则可以使用If语句很好地处理它,但客户端只是等待一个文件(这很有意义,因为没有发送任何内容)。现在,在服务器端

File f = new File("....");
if (!f.exists()) 
{
  System.out.println("error. does not exist");
}

else
{
  (send file)
}
不知道如何在客户端处理这个问题。任何帮助都很好。

我有个主意给你。
您可以做的是创建一个具有两个属性的类,第一个属性是File类型,第二个属性是boolean类型。当文件存在时,执行myObeject.setFile(f)和smyObject.setFound(true)。将对象发送给客户机,客户机将看到receivedobject.getFound()等于true,因此他将执行receivedobject.getFile()并获取文件。否则,如果找不到该文件,则执行myObeject.setFile(null)和smyObject.setFound(false)并发送myObject。当客户机接收到对象时,他将检查布尔值并发现它等于false。然后,他将显示错误消息,而不是执行getFile+1如果您愿意:D

您可以为响应提供语法,其中前3个字节始终表示“状态代码”。如果成功找到该文件,则前3个字节将为001,其余字节将为实际文件

如果找不到文件,则前3个字节将为900,之后的响应中将没有其他字节


这样,服务器总是将某些内容写回客户端(找不到文件,以及在读取文件时出现意外错误)。

为了能够给出答案,我们需要知道(发送文件)任务是如何实现的。基本上,服务器会搜索请求的文件。然后它会将其读入字节数组,并最终通过bufferedoutputstream.write()通过套接字发送。如果只传输文件的内容,则无法传输状态之类的内容。因此,您必须更改文件传输或为状态添加另一个额外传输。我建议用一些不太“低级”的方法来解决你的问题。如果您使用一些现有的协议/库,那么它将为您处理所有这些状态信息。将对象写回流比只写文件内容更具挑战性。当一个对象被写入流时,我们必须确保客户端可以使用这些字节在自己的内存中创建一个对象。示例:Java服务器不能在不使用特殊协议/库的情况下将对象发送到C#客户机。我只是好奇。你为什么选择900告诉我找不到文件?这是惯例吗?我不知道惯例。。但它允许我们说“900-999”范围是指错误代码。好的,好主意。这就像一个惯例。我喜欢它。谢谢