我正在编写一个与运行 servlet 的 Tomcat 服务器通信的 Android 应用程序。我正在对 Tomcat 服务器执行 POST,指定我希望服务器将什么文件发送回客户端(Android 应用程序)。当我尝试通过将随 POST 发送的文件名添加到目录名称来打开此文件时,我得到一个 FileNotFoundException。但是硬编码完全相同的文件名就可以了。
复制粘贴从 Tomcat 服务器控制台抛出 FileNotFoundException 时获得的文件路径到 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:http://date.jsontest.com/
这将返回一个如下所示的 json:
{
"time": "05:58:38 AM",
"milliseconds_since_epoch": 1400047118645,
"date": "05-14-2014"
}
通过切换到另一台服务器,一切正常 - 后来我发现用户代理存在问题(正如我上面所说的) - 将其设置为类似 Chrome 用户代理的东西,它也应该正常工作。
希望对你有所帮助。
关于java - 神秘的 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188925/