Servlet无法打开txt

时间:2012-11-10 08:33:07

标签: java servlets

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

            }
           }
    }

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

3 个答案:

答案 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“