1

サーブレットは非常に見栄えがよく、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

ファイル「hello.txt」と pushkin.txt は「C:\Users\vany\Desktop\test\」フォルダ内に直接ありますか? または、「C:\Users\vany\Desktop\test\」とは別のフォルダに pushkin.txt ファイルがありますか?

サーブレットを呼び出す方法を教えていただけますか?

別のフォルダーに pushkin.txt があり、「folder\pushkin.txt」のようなものでサーブレットを呼び出すと、getFileNames() がファイル名 (フォルダーなし) を返し、「myName.equals(string)」が次のように失敗するため、機能しません。 "folder\pushkin.txt" は "pushkin.txt" と等しくありません

于 2012-11-10T10:34:13.270 に答える
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 に答える