2012-03-15 2 views
5

Я хотел бы создать приложение, которое требует прочитать файл .txt в моем каталоге проектов.Как прочитать файл TXT в каталоге страниц сервера Java

Это мой код моего index.jsp:

<%@page import="java.io.FileReader"%> 
<%@page import="java.io.BufferedReader"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Read Text</title> 
    </head> 
    <body> 
     <% 
      BufferedReader reader = new BufferedReader(new FileReader("aFile.txt")); 
      StringBuilder sb = new StringBuilder(); 
      String line; 

      while((line = reader.readLine())!= null){ 
       sb.append(line+"\n"); 
      } 
      out.println(sb.toString()); 
     %> 
    </body> 
</html> 

Когда я выполняю код выше, мой браузер сообщает мне, что aFile.txt не может быть найден. Затем я положил aFile.txt в тот же каталог, что и на этой веб-странице (index.jsp). Интересно, что мне написать, чтобы найти каталог aFile.txt

И вот как моя проблема была решена. Благодаря Ahmad Hasem

<%@page import="java.io.File"%> 
<%@page import="java.io.InputStreamReader"%> 
<%@page import="java.net.URL"%> 
<%@page import="java.io.FileReader"%> 
<%@page import="java.io.BufferedReader"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Read Text</title> 
    </head> 
    <body> 
     <% 
      String jspPath = session.getServletContext().getRealPath("/res"); 
      String txtFilePath = jspPath+ "/aFile.txt"; 
      BufferedReader reader = new BufferedReader(new FileReader(txtFilePath)); 
      StringBuilder sb = new StringBuilder(); 
      String line; 

      while((line = reader.readLine())!= null){ 
       sb.append(line+"\n"); 
      } 
      out.println(sb.toString()); 
     %> 
    </body> 
</html> 

ответ

2

где файл JSP и текст file.are вы поставите как в веб-инф folder.please удалить текстовый файл с веб-инф, потому что вы нужны сервлет, если вы хотите получить доступ к текстовый файл из Интернета -inf.

используйте нижеследующий код для получения пути к текстовому файлу.

 this 
     .getServlet() 
     .getServletContext() 
     .getRealPath(FOLDER NAME) 
     .concat(System.getProperty("file.separator") 
     .concat(FILE NAME)); 

передать вышеуказанный код в файловом объекте.

+0

Да, я положил его на web-inf. Что, если я положил его на внешний веб-инф? например, я делаю папку и помещаю ее туда. – farissyariati

+0

используйте приведенный выше код для получения пути к текстовому файлу. –

5

Чтобы получить каталог бегущего JSP, вы можете вызвать следующий код:

String jspPath = session.getServletConfig().getServletContext().getRealPath("/"); 

Этот код предполагает, что JSP находится в корневом каталоге вашего веб-приложения. Затем, вы можете добавить имя файла TXT в jspPath

String txtFilePath = jspPath + java.util.File.separator + "aFile.txt"; 
+0

так близко. Но я не могу найти getServletConfig, вы можете мне помочь? – farissyariati

+0

Спасибо. это решило мою проблему. :) – farissyariati

0

Вы не должны предполагать, что файл может быть прочитан с помощью файловой системы. Это информация о развертывании и реализации в отношении того, был ли файл WAR «взорван» или нет.

Предполагая, что aFile.txt находится в корневом каталоге вашего приложения, вы должны быть в состоянии открыть поток using the servlet context:

<% java.io.InputStream in = application.getResourceAsStream("/aFile.txt"); %> 

Есть также более подходящие способы INLINE другие файлы в JSP.

СПЯ включают standard action:

<jsp:include page="aFile.txt" /> 

В JSTL импорта тег:

<%-- header --%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
.... 
<c:import url="/aFile.txt" /> 

Я предполагаю, что этот код написан для образовательных целей. Никакое современное приложение не должно включать <% %> скриптлеты.

+0

О вашем последнем заявлении, как их следует делать тогда? Любая ссылка, пожалуйста? Заранее спасибо –

+0

@BtcSources Я предполагаю, что вы говорите о моем комментарии к скриптлетам. [BalusC] (http://stackoverflow.com/users/157882) содержит следующую страницу: [Как избежать кода Java в JSP-файлах?] (Http://balusc.blogspot.co.uk/2010/07/ как к избегаю-Java-кода-в-Jsp-files.html) – McDowell

0

Как я уже испытал, он будет считываться из корневого каталога вашего веб-сервера. Фактически из каталога вы запустили веб-сервер. В Tomcat это будет/home/mike/tomcat.Естественно, потому что именно из этого каталога вы запустили свою виртуальную машину Java, и Java рассмотрит ее ее корневой каталог.

Смежные вопросы