# JSP - Datei einlesen



## java007 (25. Jan 2011)

Hallo Zusammen,

ich versuche in einer jsp-datei eine txt-datei einzulesen und zwar folgendermaßen:


```
<h:outputLabel value="index">
<%
	String s = null;
	StringBuffer datei = new StringBuffer();
	try {
		 BufferedReader in = new BufferedReader(new FileReader("index.txt"));
		while ((s = in.readLine()) != null) {
			 datei.append(in.readLine()+ System.getProperty("line.separator"));
		}
		in.close();
		} 
		catch (Exception e) {
			System.out.print(e);						}
%>
</h:outputLabel>
```

leider bekomme ich diese fehlermeldung: 
java.io.FileNotFoundException: index.txt (Das System kann die angegebene Datei nicht finden)
Die text-datei befindet sich im WebContent.
Gibt es auch eine Möglichkeit mit Hilfe von jsp/jsp-tags Datein einzulesen oder geht es nur mit java-codes wie oben?

mfg


----------



## Stroker89 (26. Jan 2011)

Les die Datei doch mit einem Servlet und übergib dein Ergebnis an die JSP.

Korrigiert mich wenn ich falsch liege 

Gruß


----------



## maki (26. Jan 2011)

Stroker89 hat gesagt.:


> Meiner Meinung nach kann das auch nicht funktionieren. Da die JSP ja auf dem Client ausgeführt wird und ich nicht glaube dass sich Dateien aus relativen Pfaden Auslesen kann.
> Les die datei doch mit einem Servlet und übergib dein Ergebnis an die JSP.
> 
> Korrigiert mich wenn ich falsch liege


Wenn du darauf bestehst 

JSPs werden nicht beim Client ausgeführt, JSPs sind Servlets in anderer Darstellung.

Der TS gibt wohl einen falschen Pfad an, aber die Idee mit dem Servlet gefällt mir


----------



## Stroker89 (26. Jan 2011)

Ok dann war meine Annahme wohl falsch  

Hab ich wieder was gelernt  Danke


----------



## java007 (26. Jan 2011)

Moin Moin  
nun ich habe mir gedacht eine text-datei einzulesen und über outputlable auf der seite darzustellen. Wäre dieser Gedankengang überhaupt möglich, sowie ich es oben gemacht habe? Habt Ihr vlt vorschläge wie mans besser machen könnte. Würde mich auf eure vorschläge sehr freuen 
@Stroker89: ich stelle mir das so vor, dass die seite auf dem server erst einmal aufgebaut wird und im anschluss der client es zu gesicht bekommt. Bitte korrigiert mich falls ich was durcheinander bringe 
mfg


----------



## Stroker89 (26. Jan 2011)

Ja die Definition von Maki trifft zu 

Wie schon gesagt würde ich das Ganze über ein Servlet realisieren.

Du wirst die Seite, auf der du dein Ergebnis darstellen möchtest, ja irgendwie aufrufen. Das würde ich zuerst über ein Servlet machen dort deine txt Datei einlesen dein Ergebnis entweder im Servlet über den response ausgeben oder den Request mit dem Ergebnis füllen und dann in einer JSP ausgeben lassen. So hast du schonmal Logik und Darstellung getrennt solltest du Variante 2 wählen 

Gruß


----------



## ARadauer (26. Jan 2011)

Stroker89 hat gesagt.:


> Meiner Meinung nach kann das auch nicht funktionieren. Da die JSP ja auf dem Client ausgeführt wird und ich nicht glaube dass sich Dateien aus relativen Pfaden Auslesen kann.
> Les die datei doch mit einem Servlet und übergib dein Ergebnis an die JSP.
> 
> Korrigiert mich wenn ich falsch liege
> ...



Sorry das ich das jetzt so hart sage: Aber wenn man überhaupt keien Ahnung hat sollte man in diesem Bereich keine Tipps geben....


----------



## Stroker89 (26. Jan 2011)

Wenn´s dich so stört editiere ich den Post. 

Entschuldigung dass man nicht alles wissen kann und ich noch recht neu bin in dem Thema. Zum Glück gibt es noch User wie Maki...


----------



## java007 (26. Jan 2011)

Also hier nochmal der gesamte code. Eigentlich sehr simple was ich versuche. Ich starte die index.jsp, auf der zwei buttons dargestellt werden und zwar einmal "go-" und "reset-button". go hat die funktionalität dass activity auf false gesetzt wird, sodass bei der überprüfung <hanelGroup rendered="#{userBean.activity!=true}"> diese Bedingung erfüllt wird und der Rest nun auch durchgeführt wird, was beim Start nicht der Fall ist. reset ist dafür gedacht activity wieder auf true zu setzen. wenn ich nun auf go klicke, funktioniert genau das nicht, was ich möchte. ich erhalte FileNotFoundException. ;(

@Adenauer: ich finde deine bemerkung äußerst sinnlos. haben denn heutzutage nur leute das recht sich zu einem thema zu äußern wenn sie denn ein thema zu 100% beherrschen können? stroker89 hat dazu seine meinung gesagt, mit der bemerkung dass er sich nicht sicher sei. dabei hat ihm maik aufgeklärt und er weiß nun mehr über das thema. was ist dabei nun kritikwürdig ? tut mir leid aber auch wenns hart klingt, solche blöden äußerungen haben hier erst recht nichts verloren.


```
<%@page import="mainP.UserBean"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.BufferedReader"%>
<%@ page import="java.io.FileReader"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<f:view>
Hello World!

<h:form>
<h:panelGrid columns="2">
<h:commandButton value="go" action="#{userBean.igo}" />
<h:commandButton value="reset" action="#{userBean.reset}" />
</h:panelGrid>
<h:panelGroup rendered="#{userBean.activity!=true}">
<h:outputLabel value="My Person">
<%
	String s = null;
	StringBuffer datei = new StringBuffer();
try {
	BufferedReader in = new BufferedReader(new FileReader("index.txt"));
	while ((s = in.readLine()) != null) {
		datei.append(in.readLine()+ System.getProperty("line.separator"));
	}
										in.close();
	} 
	catch (Exception e) {	
                               System.out.print(e);
	}
%>
</h:outputLabel>
</h:panelGroup>
</h:form>
</f:view>
</body>
</html>
```


----------



## Stroker89 (26. Jan 2011)

In was für einem Verzeichnis liegt denn deine txt File? Fest steht ja, dass sie nicht gefunden werden kann. Probier doch mal den absoluten Pfad anzugeben . Hatte das selbe Problem bei einem Servlet mit dem ich Bilder hochlade.


----------



## ARadauer (26. Jan 2011)

> haben denn heutzutage nur leute das recht sich zu einem thema zu äußern wenn sie denn ein thema zu 100% beherrschen können? stroker89 hat dazu seine meinung gesagt, mit der bemerkung dass er sich nicht sicher sei.



Ja ich weiß das meine Aussage sehr grenzwertig. Aber es geht hier nicht um 100%iges Wissen! Das ist etwas sehr sehr grundlegends... 
Wenn ich sage jsp wird am client ausgeführt, könnte ich genauso in ein mathematik forum gehen und sagen PI ist 4...


Aber egal, noch ein kleiner Tipp von mir. close nach Möglichkeit im finally mache, damit wird es immer ausgeführt...

```
BufferedReader in;
      try {
         in = new BufferedReader(new FileReader("index.txt"));
         while ((s = in.readLine()) != null) {
            datei.append(in.readLine() + System.getProperty("line.separator"));
         }         
      } catch (Exception e) {
         System.out.print(e);
      }finally{
         if(in != null)
            in.close();
      }
```


----------



## Stroker89 (26. Jan 2011)

Hab das ganze auch ein bisschen verwechselt. Natürlich ist mir bewusst, dass Javacode in JSP Files natürlich nicht vom Client ausgeführt wird. Hatte damit eigentlich den HTML Code gemeint, denn der wird ja vom Browser auf Client Seite interpretiert und ausgegeben. 

Dafür bin ich jetzt auch um Einiges schlauer. 

Gruß


----------



## java007 (26. Jan 2011)

@Adenauer: habe deine verbesserung eingepflegt danke 
Also ich habe es jetzt geschafft die Datei einzulesen und den inhalt auszugeben allerdings über die Konsole  wie bekomme ich den text auf die Page? ich habe den code in den outputLabel eingebettet mit der hoffnung diese als outputLaber auszugeben 


```
<h:outputLabel value="index">
<%
String s = null; 
StringBuffer datei = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader( new FileReader("C:\\index.txt"));
Scanner in = new Scanner(br);
ArrayList<String> outt = new ArrayList<String>();
while (in.hasNext()) {								       outt.add(in.next());
}
for (int i = 1; i <= outt.size(); i++) {
System.out.println("Wort" + i + ": "+ outt.get(i - 1));
}
} catch (Exception e) {
System.out.print(e);
} finally {
if (br != null) {
br.close();
}			
}
%>
</h:outputLabel>
```


----------



## ARadauer (26. Jan 2011)

Ich glaube nur out.println("usw"); müsste gehen... bin mir aber nicht mehr sicher... das geht auch..

```
<%
String s = null; 
StringBuffer datei = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader( new FileReader("C:\\index.txt"));
Scanner in = new Scanner(br);
ArrayList<String> outt = new ArrayList<String>();
while (in.hasNext()) {                                     outt.add(in.next());
}
for (int i = 1; i <= outt.size(); i++) {
%>

<%="Wort" + i + ": "+ outt.get(i - 1) %>

<%
}
} catch (Exception e) {
System.out.print(e);
} finally {
if (br != null) {
br.close();
}           
}
%>
```

nichi Adenauer: Andreas Radauer, aber egal, wurde hier schon öfter so genannt ;-)


----------



## java007 (26. Jan 2011)

@ARadauer: sorry, kanns mir irgendwie nicht erklären wie ich auf Adenauer komme 

danke für den Tipp, es funktioniert


----------



## Stroker89 (26. Jan 2011)

Wie ich sehe hats mit dem absoluten Pfad geklappt


----------

