2012-03-15 12 views
5

Vorrei creare un'applicazione che richiede di leggere un file .txt nella directory del mio progetto.Come leggere un file TXT nella directory della pagina del server Java

Questo è il mio codice della mia 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> 

Quando eseguo il codice di cui sopra, il mio browser mi dice che aFile.txt non può essere trovato. Quindi, ho inserito aFile.txt nella stessa directory in cui viene eseguita questa pagina Web (index.jsp). Mi chiedo, cosa dovrei scrivere per trovare la directory di aFile.txt

E questo è il modo in cui il mio problema è stato risolto. Grazie 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> 

risposta

2

dove si trova il file jsp e il testo file.are si mette sia in WEB-INF folder.please rimuovere file txt da WEB-INF, perché siete bisogno servlet se si desidera accedere a file txt da web -inf.

utilizzare il codice seguente per ottenere il percorso del file di testo.

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

passare il codice sopra nell'oggetto file.

+0

Sì, l'ho messo su web-inf. Cosa succede se lo metto fuori da web-inf? per esempio faccio una cartella e la metto lì. – farissyariati

+0

usa il codice sopra per ottenere il percorso del file di testo. –

5

Per ottenere la directory del JSP in esecuzione, è possibile chiamare il seguente codice:

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

Questo codice presuppone che il JSP risiede nella directory principale della vostra applicazione web. Quindi, è possibile aggiungere il nome del file txt al jspPath

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

così vicino. Ma non riesco a trovare getServletConfig, puoi aiutarmi? – farissyariati

+0

Grazie. questo ha risolto il mio problema. :) – farissyariati

0

Non si deve supporre che il file può essere letto utilizzando il file system. È un dettaglio di implementazione e implementazione sul fatto che il file WAR sia "esploso" o meno.

Supponendo che aFile.txt è nella root della vostra applicazione, si dovrebbe essere in grado di aprire il flusso using the servlet context:

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

ci sono anche modi più appropriati per Inline altri file in una JSP.

Il JSP includono standard action:

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

Il tag JSTL importazione:

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

Io parto dal presupposto di questo codice è stato scritto per scopi didattici. Nessuna applicazione moderna dovrebbe includere gli scriptlet <% %>.

+0

Sulla tua ultima affermazione, come dovrebbero essere fatti allora? Qualche riferimento per favore? Grazie in anticipo –

+0

@BtcSources presumo tu stia parlando del mio commento sugli scriptlet. [BalusC] (http://stackoverflow.com/users/157882) ha una pagina su questo: [Come evitare il codice Java nei file JSP?] (Http://balusc.blogspot.co.uk/2010/07/ how-to-evitare-java-codice-a-jsp-files.html) – McDowell

0

Come ho provato, leggerà dalla directory principale del server web. In realtà dalla directory hai avviato il webserver. In Tomcat sarà/home/mike/tomcat.Naturalmente, poiché proveniva da questa directory, hai avviato la tua macchina virtuale java e java considererà questa la sua directory principale.

Problemi correlati