2012-11-10 76 views
1

Servlet非常好看,並且可以讀取像hello.txt這樣的英文名稱的文件。它不想讀取具有俄文名稱的文件,例如pushkin.txt。有人能幫助解決這個問題嗎?Servlet不會打開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(); 
         } 
        } 
       } 
       } 

      } 
      } 
    } 

的問題是相關的,這個問題不解決

+1

是你的問題解決了沒有?您接受了一個答案,但沒有留下任何反饋意見,表明問題已經解決,以及如何解決問題。 – BalusC

+0

不,我的問題不解決 –

+0

Ачтовамоставитьуменяесть的Gmail –

回答

0

我還以爲你有蒙山陳述

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

我會比較有問題以這種方式

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

我希望它能幫助你。 注意:感謝您的評論,您可以嘗試。

問候

+0

您選擇不工作 –

+0

的getName()方法是不確定的String類型 –

+0

這裏這樣的錯誤寫的Eclipse –

0

首先我會使用調試器來檢查什麼是錯的代碼。沒有運行代碼就很難找到一個bug。如果你不想使用調試器打印出的目錄中所有文件名以確保某些文件的名字中發現:

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

如果發現文件我會檢查我是否有權利對其進行寫操作。可能是應用程序沒有適當的權限來寫入選定的目錄。

+0

他發現所有的文件名,但是當你試圖打開一個文件一個俄羅斯名稱servlet只是給我一個白色的屏幕 –

+0

但拉丁字母或Cyrllic俄文名? –

+1

你確定文件沒有改變嗎?我沒有看到你從這個servlet中返回一個HTML文檔的位置,所以如果你不寫入響應對象,你會看到一個白色的屏幕。 –

0

是文件 「hello.txt的」 和pushkin.txt直接在 「C:\用戶\ vany \桌面\測試\」 文件夾?或者是從「C:\ Users \ vany \ Desktop \ test \」中的另一個文件夾中的pushkin.txt文件?

你能告訴我們如何調用servlet嗎?

如果你在另一個文件夾中有pushkin.txt並且你用類似「folder \ pushkin.txt」的方式調用servlet,它將不起作用,因爲getFileNames()返回文件名(不帶文件夾)和「myName.equals )」失敗爲‘文件夾\ pushkin.txt’不等於‘pushkin.txt’

+0

txt文件都在C:\ Users \ vany \ Desktop \ test \目錄中的一個目錄 –

+0

中。 –