1

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();
                      }
                   }
                }
                }

            }
           }
    }

问题是相关的,问题没有解决

4

3 回答 3

0

我以为你的陈述有问题

for (String string : files) {
        if (myName.equals(string)) {

我会这样比较

for (File file: files) {
        if (myName.equals(file.getName())) { 

我希望它对你有帮助。注:感谢评论,您可以试试。

问候

于 2012-11-10T08:41:30.913 回答
0

首先,我会使用调试器来检查该代码有什么问题。不运行代码很难找到错误。如果您不想使用调试器打印出在目录中找到的所有文件名,以确保找到一些文件名:

for (String string : files) {
    System.out.println(string)
    ....

如果找到文件,我会检查我是否有权写入它们。可能是应用程序没有适当的权限在所选目录中写入。

于 2012-11-10T08:42:04.670 回答
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)”失败为“文件夹\pushkin.txt”不等于“pushkin.txt”

于 2012-11-10T10:34:13.270 回答