Servlet非常好看并且读取具有英文名称的文件,例如hello.txt。它不想读取具有俄语名称的文件,例如pushkin.txt。有人能帮忙解决这个问题吗?
以下是代码:
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class servlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public static List<String> getFileNames(File directory, String extension) {
List<String> list = new ArrayList<String>();
File[] total = directory.listFiles();
for (File file : total) {
if (file.getName().endsWith(extension)) {
list.add(file.getName());
}
if (file.isDirectory()) {
List<String> tempList = getFileNames(file, extension);
list.addAll(tempList);
}
}
return list;
}
@SuppressWarnings("resource")
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html; charset=UTF-8");
String myName = request.getParameter("text");
List<String> files = getFileNames(new File("C:\\Users\\vany\\Desktop\\test"), "txt");
for (String string : files) {
if (myName.equals(string)) {
try {
File file = new File("C:\\Users\\vany\\Desktop\\test\\" + string);
FileReader reader = new FileReader(file);
int b;
PrintWriter writer = response.getWriter();
writer.print("<html>");
writer.print("<head>");
writer.print("<title>HelloWorld</title>");
writer.print("<body>");
writer.write("<div>");
while((b = reader.read()) != -1) {
writer.write((char) b);
}
writer.write("</div>");
writer.print("</body>");
writer.print("</html>");
}
finally {
if(reader != null) {
try{
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
}
问题是相关的,问题没有解决
答案 0 :(得分:0)
我认为你的陈述有问题
for (String string : files) {
if (myName.equals(string)) {
我会用这种方式比较
for (File file: files) {
if (myName.equals(file.getName())) {
我希望它对你有帮助。 注意:感谢您的评论,您可以尝试一下。
问候
答案 1 :(得分:0)
首先,我会使用调试器来检查该代码有什么问题。没有运行代码就很难找到错误。如果您不想使用调试器打印出目录中找到的所有文件名,以确保找到一些文件名:
for (String string : files) {
System.out.println(string)
....
如果找到文件,我会检查我是否有权写信给他们。可能是应用程序没有适当的权限来写入所选目录。
答案 2 :(得分:0)
文件“hello.txt”和pushkin.txt是否直接位于“C:\ Users \ vany \ Desktop \ test \”文件夹中?或者是来自“C:\ Users \ vany \ Desktop \ test \”的另一个文件夹中的pushkin.txt文件?
您能告诉我们您如何调用servlet吗?
如果你在另一个文件夹中有pushkin.txt并且用“folder \ pushkin.txt”之类的东西调用servlet它将无法工作,因为getFileNames()返回文件名(没有文件夹)和“myName.equals(string) “失败,因为”folder \ pushkin.txt“不等于”pushkin.txt“