Java 神秘的FileNotFoundException

Java 神秘的FileNotFoundException,java,android,tomcat,servlets,Java,Android,Tomcat,Servlets,我正在编写一个Android应用程序,它与运行servlet的Tomcat服务器通信。我正在向Tomcat服务器发送帖子,指定我希望服务器将什么文件发送回客户端(Android应用程序)。当我试图通过将随帖子发送的文件名添加到目录名来打开此文件时,我得到一个FileNotFoundException。但是硬编码完全相同的文件名就可以了 复制粘贴当FileNotFoundException从Tomcat服务器控制台抛出到windows资源管理器时获得的文件路径将打开正确的文件。我还将硬编码文件路径

我正在编写一个Android应用程序,它与运行servlet的Tomcat服务器通信。我正在向Tomcat服务器发送帖子,指定我希望服务器将什么文件发送回客户端(Android应用程序)。当我试图通过将随帖子发送的文件名添加到目录名来打开此文件时,我得到一个FileNotFoundException。但是硬编码完全相同的文件名就可以了

复制粘贴当FileNotFoundException从Tomcat服务器控制台抛出到windows资源管理器时获得的文件路径将打开正确的文件。我还将硬编码文件路径和将文件名附加到目录路径的路径写入日志文件。在这个日志文件中,两个文本看起来完全相同,复制粘贴到windows资源管理器中会打开正确的文件。有人知道为什么会产生FileNotFoundException吗

从客户端做文章

String potentialIP = "http://"+url+":8080/se.myPage/myServlet";
URL url = new URL(potentialIP);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setChunkedStreamingMode(0);

// Starts the query
conn.connect();

OutputStream out = new BufferedOutputStream(conn.getOutputStream());
byte[] byteArray = korning.getBytes();
out.write(byteArray);
out.flush();
服务器端的doPost方法如下所示

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    InputStream in = request.getInputStream();
    java.util.Scanner s = new java.util.Scanner(in).useDelimiter("\\A");

    String fileName = s.hasNext() ? s.next() : "";
    String filePath = "C:/myCatalog/"+fileName;

    PrintWriter out = response.getWriter();

    PrintWriter writer = new PrintWriter("C:/myCatalog/Servletlog.txt", "UTF-8");
    writer.write("'"+"C:/myCatalog/hardCodedFileName.txt"+"'");
    writer.write("'"+filePath+"'");
    writer.flush();
    writer.close();

    BufferedReader reader = new BufferedReader(new FileReader(filePath));

    String svar = reader.readLine();
    reader.close();     
    out.close();
}

有人知道如何解决这个问题吗?

对我来说,结果是服务器阻塞了默认的用户代理(可能什么都没有),并返回了
403
。这会在我尝试时抛出
FileNotFoundException
。然后,我从另一台服务器更改为json示例: 这将返回如下所示的json:

{
   "time": "05:58:38 AM",
   "milliseconds_since_epoch": 1400047118645,
   "date": "05-14-2014"
}
通过切换到另一台服务器,一切都很好——后来我发现(正如我上面所说)用户代理有问题——将它设置为类似Chrome用户代理的东西,它也应该正常工作


希望它能帮助您。

我建议发布日志文件。另外,我猜您不需要文件路径中myCatalog前面的空间。这可能是您的问题->C:/myCatalog/hardCodedFileName.txt您是指Tomcat日志文件还是我用PrintWriter制作的日志文件?我不明白你在说什么空间?如果你指的是“'”,那么它的存在是有原因的——确保没有换行符或空格把事情弄糟。那么你是说服务器无法打开文件进行读取,因此它可以将内容返回给客户端?您的客户机中的
corning
变量包含哪些内容?@wea我编辑了空格。但它应该只影响您的日志记录。这一行中有一个额外的空格:writer.write(“+”C:/myCatalog/hardCodedFileName.txt“+””);,在C:/和路径的myCatalog/部分之间。更好的
korning.getBytes(“UTF-8”)
新的BufferedReader(新的ÌnputStreamReader(新的FileInputStream(filePath),“UTF-8”);
否则默认平台编码。