Roger: Datei auslesen und lokal in andere Datei schreiben

Hallo Leute

Ich habe ein grosses Problem. Ich habe gestern ein Java Applet heruntergeladen, welches in der Lage ist ein File im selben Ordner einzulesen und Sie dann auszugeben.
Das Problem beim ganzen Applet ist aber, dass das File jeweils den Namen der URL trägt.
Ich möchte die Daten/das File aber irgendwo z.B. C:/blabla/bla/bla.xml speichern.
Ist so etwas den nicht möglich?

Der Code sieht folgendermassen aus:

In der .htm Datei:

<HTML>
 <HEAD>
<title>Lösung mit Applet</title>
<link rel=stylesheet type="text/css" href="../src/wselfhtm.css">
<SCRIPT type="text/javascript" language="JavaScript">
<!--
var source = "";
function read(file)
{

document.fileopener.setFile(window.location.href, file);       //window.location.href,file
 source = document.fileopener.getFile();
 document.write (source);
}
//-->
</SCRIPT>
 </HEAD>
 <body bgcolor="#FFFFFF" text="#000000" link="#AA5522" vlink="#772200" alink="#000000">
 <h2 class="Sh2"><a class="an" name="a1">Lösung mit Applet</a></h2>
 <p><img src="../src/xshow.gif" width=33 height=14 border=0 alt="Beschreibung"><br>
 <a href="artikel.htm#a5"><b>Beschreibung: so wird's gemacht</b></a></p>
<P>
 Geben Sie eine Datei im selben Verzeichnis ein (z.B: test.txt) und clicken Sie auf "read".
</P>
  <FORM>
   <INPUT type="file" name="filename">
   <BR>
   <A href="javascript:read(document.forms[0].filename.value)">read </A>
<script type="text/javascript">

</script>

</form>
    <APPLET code="JSfileopener.class" width=1 height=1 mayscript name="fileopener">
  </applet>
 </BODY>
</HTML>

Code im Java Applet:

import java.applet.*;
import java.awt.*;
import netscape.javascript.JSObject;
import java.net.URL;
import java.io.*;

public class JSfileopener extends Applet
{
 public String bgcolor;
 public DataInputStream stream;

public String getAppletInfo()
 {
  return "Name: JS Fileloader\n" +
  "Author: Daniel Thoma\n" +
  "E-Mail: dthoma@gmx.net\n" +
  "Tested with: MSIE 4.x/5.x NN 4.x";
 }

public String[][] getParameterInfo()
 {
  String[][] info =
  {
   {"color","color","something like #ff00ab"}
  };
  return info;
 }

public void init()
 {
  bgcolor = getParameter("color");
  if(bgcolor == null)
  {
   bgcolor = ((JSObject)JSObject.getWindow(this).getMember("document")).getMember("bgColor").toString();
  }
 }

public void paint(Graphics g)
 {
  g.setColor(Color.decode(bgcolor));
  Rectangle r = g.getClipBounds();
  g.fillRect(r.x, r.y, r.width, r.height);
 }

public void setBgcolor(String colorvalue)
 {
  bgcolor = colorvalue;
  repaint();
 }

public void setFile(String master, String file) throws IOException
 {
  URL url = new URL(new URL(master), file);
  stream = new DataInputStream(url.openStream());
 }

public void setFile(String file) throws IOException
 {
  URL url = new URL(file);
  stream = new DataInputStream(url.openStream());
 }

public String readFile() throws IOException
 {
  String line    = "";
  if((line = stream.readLine()) != null)
  {
   return line;
  }
  else
  {
   stream.close();
   return null;
  }
 }

public String getFile() throws IOException
 {
  String source    = "";
  String line;
  while((line = readFile()) != null)
  {
   source += line +"\n";
  }
  return source;
 }
}

P.S. Ich habe die Files von dieser Seite heruntergeladen.

Freundliche Grüsse

Roger

  1. Kann mir niemand helfen? Ich bin jetzt schon so lange auf der Suche nach Hilfe. Aber niemand kann mir helfen, Ihr seit meine letzte Hoffnung.

    1. moin Roger :)

      Wenn du mal ein bisschen nach "Sicherheit" und "Applet" googelst, wirst du sicherlich ganz schnell herausfinden, warum das nicht so einfach geht (und nicht gehen darf!), was du vorhast. Wenn du das tortzdem unbedingt brauchst und musst, solltest du dir Gedanken über Singierung machen. Allderings halte ich das gefährlich, wenn du mit ausgereiftem Halbwissen und einem signierten Applet auf der Platte deiner User rumwurschteln willst.

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. Hallo lina und andere Helferlein...

        Ich verstehe Deine Bedenken nicht ganz. Das ganze funktioniert ja komplett lokal, also nichts im Web. Die Personen die dies brauchen, werden sich ein File in den Ordner legen, das Applet ausführen und der Inhalt des Files wird (sollte, funktioniert noch nicht) wird in ein anderes File gelesen. Von mir aus auf demselben Laufwerk aber einfach z.B. unter dem Namen Daten.xml.

        Dies ist nämlich nur ein Teil, denn ich arbeite mit XForms und brauche deshalb ein File wo das Instance Objekt (XForms) drauf verweisen kann. Deshalb muss ich die Daten in diesem File haben.

        Grüsse aus der kalten Schweiz

        Roger

        1. moin Roger :)

          Ich verstehe Deine Bedenken nicht ganz. Das ganze funktioniert ja komplett lokal, also nichts im Web. Die Personen die dies brauchen, werden sich ein File in den Ordner legen, das Applet ausführen und der Inhalt des Files wird (sollte, funktioniert noch nicht) wird in ein anderes File gelesen. Von mir aus auf demselben Laufwerk aber einfach z.B. unter dem Namen Daten.xml.

          Dies ist nämlich nur ein Teil, denn ich arbeite mit XForms und brauche deshalb ein File wo das Instance Objekt (XForms) drauf verweisen kann. Deshalb muss ich die Daten in diesem File haben.

          Das verstehe ich erst recht nicht. Bringt denn jeder User sein eigenes instance mit? Wozu diese rumkopiererei?
          Und wenn das alles lokal funktionieren soll - warum dann ein Applet?

          Deine Vorgehensweise ist mir einfach nicht klar. Auf jeden Fall kannst du nicht so ohne weiteres auf den Laufwerken deiner User speichern mit einem Applet.

          liebe Grüße aus Berlin
          lina-

          --
          Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
          1. Also ich versuche Dir das ganze zu erklären:

            Ich arbeite in einer Firma die ab und zu XML Files ändern muss. Diese XML Files enthalten ca 10000 Zeilen XML Code mit diversen Daten. Bisher mussten die armen User immer den Notepad öffnen den Fehler suchen und verbessern. Wenn etwas schiefging, bedeutete das Verluste in Millionenhöhe.
            Nun habe ich die Ehrenvolle Aufgabe erhalten, diese XML Files möglichst so anzuzeigen wie im Internet Explorer, einfach nicht statisch, sondern halt veränderbar.
            Nun gibt es eine neue Technologie, die sogenannten XForms, das sind eigentlich HTML Forms, aber halt eben für XML. In diesen XForms gibt es ein Element, das heisst instance. Das Instance Objekt hat die tolle Eigenschaft. dass es Daten von externen Files direkt in die entsprechenden Textboxen schreibt (natürlich nur wenn die Textboxen auch auf die richtigen Tags im XML verweisen).
            Das Problem am ganzen ist, dass das Instance Objekt leider nicht dynamisch Files reinlädt, sondern immer nur auf dasselbe File zeigt.
            Was ich deshalb machen muss, ist ein File einlesen die Daten aus dem File nehmen und z.B. in ein Text.xml schreiben. Denn ich kann dem Instance Objekt ja bsw. sagen, gucke auf Text.xml.
            Sobald nun also etwas ins Text. xml geschrieben wurde, kann ich die XForms Datei öffnen und schwupp di wupp werden alle Daten ans richtige Ort hingeschrieben, ich kann den Fehler schön verbesser.
            Speichern drücken und das File wird gespeichert. Finito...

            Das ganze Tool kann auf jedem Arbeitsplatz einzeln installiert werden. :-)
            Falls es andere Möglichkeiten, als Applets gibt, bitte sofort sagen.

            Danke Euer Roger aus der immer noch kalten Schweiz...

            1. moin Roger :)

              Ich arbeite in einer Firma die ab und zu XML Files ändern muss. Diese XML Files enthalten ca 10000 Zeilen XML Code mit diversen Daten. Bisher mussten die armen User immer den Notepad öffnen den Fehler suchen und verbessern. Wenn etwas schiefging, bedeutete das Verluste in Millionenhöhe.

              Klar - ist keine besonders gute vorgehensweise ;)

              Nun habe ich die Ehrenvolle Aufgabe erhalten, diese XML Files möglichst so anzuzeigen wie im Internet Explorer, einfach nicht statisch, sondern halt veränderbar.

              jep - auch klar.

              Nun gibt es eine neue Technologie, die sogenannten XForms, ...

              Ich kenne XForms.

              Das Problem am ganzen ist, dass das Instance Objekt leider nicht dynamisch Files reinlädt, sondern immer nur auf dasselbe File zeigt.

              Was eigentlich auch kein Problem ist. Eigentlich ist das auch kein sooo großes Problem.

              Was ich deshalb machen muss, ist ein File einlesen die Daten aus dem File nehmen und z.B. in ein Text.xml schreiben. Denn ich kann dem Instance Objekt ja bsw. sagen, gucke auf Text.xml.

              Hier hast du was wichtiges vergessen. Was ist das für ein File das du einlesen musst? Könntest du das nicht auch einfach gegen Text.xml austauschen? Oder sind da nur die Veränderungen drin?

              Sobald nun also etwas ins Text. xml geschrieben wurde, kann ich die XForms Datei öffnen und schwupp di wupp werden alle Daten ans richtige Ort hingeschrieben, ich kann den Fehler schön verbesser.
              Speichern drücken und das File wird gespeichert. Finito...

              Das verstehe ich auch. Aber ich glaube auch hier liegt ein Denkfehler vor. Der User kann sich zwar die generierte Formularseite speichern - aber soweit ich weiss nicht die XML DAtei... oder bin ich da grad aufm Holzweg?

              Was ich nicht verstehe, warum wird die XML-DAtei bei den Usern nicht einfach ausgetauscht? Ist der Fehler für jeden unterschiedlich? Hat jeder andere XML-Daten? Vielleicht solltest du einfach einen Client schreiben und nicht das HHTP missbrauchen ;) Es gibt wunderbare Java-Bibliotheken die XML parsen können - ein bisschen GUI drum rum bauen und fertig.

              liebe Grüße aus Berlin
              lina-

              --
              Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
              1. Hier hast du was wichtiges vergessen. Was ist das für ein File das du einlesen musst? Könntest du das nicht auch einfach gegen Text.xml austauschen? Oder sind da nur die Veränderungen drin?

                Es ist ein XML File das ich einlesen muss. Geht das nicht? Die User könnten die fehlehafte Datei einfach in XML umtaufen, aber das ist Ihnen zu komplizert --Naja--meine Idee ist auch en wenig kompliziert, aber es wird eben nicht nur die Daten rein - rauskopiert, sondern da es verschiedene XML Typen gibt, auch das richtige Teplate ausgewählt. Deshalb würde das alles auf einmal gehen.

                Das verstehe ich auch. Aber ich glaube auch hier liegt ein Denkfehler vor. Der User kann sich zwar die generierte Formularseite speichern - aber soweit ich weiss nicht die XML DAtei... oder bin ich da grad aufm Holzweg?

                Da muss ich Dir wiedersprechen, dies funzt und zwar ohne Probleme.
                :-)

                Was ich nicht verstehe, warum wird die XML-DAtei bei den Usern nicht einfach ausgetauscht? Ist der Fehler für jeden unterschiedlich? Hat jeder andere XML-Daten? Vielleicht solltest du einfach einen Client schreiben und nicht das HHTP missbrauchen ;) Es gibt wunderbare Java-Bibliotheken die XML parsen können - ein bisschen GUI drum rum bauen und fertig.

                Die XML Dateien kommen aus diversen Systemen und es kann vorkommen, dass es bei Zeitänaderungen Sommer-Winter oder Winter - Sommer zu falschen Ausgaben kommt.
                Könntest Du mir mehr über dieses Client-Zeugs erklären, bzw. mir den fixfertigen Code liefern. ;-) Ich habe nämlich ein kleines Problem, meine Java Kenntnisse sid sehr basic... :-( (2 Semester im Studium)

                1. moin Roger :)

                  Das verstehe ich auch. Aber ich glaube auch hier liegt ein Denkfehler vor. Der User kann sich zwar die generierte Formularseite speichern - aber soweit ich weiss nicht die XML DAtei... oder bin ich da grad aufm Holzweg?

                  Da muss ich Dir wiedersprechen, dies funzt und zwar ohne Probleme.
                  :-)

                  Ok.. danke - wieder was gelernt :)

                  Die XML Dateien kommen aus diversen Systemen und es kann vorkommen, dass es bei Zeitänaderungen Sommer-Winter oder Winter - Sommer zu falschen Ausgaben kommt.
                  Könntest Du mir mehr über dieses Client-Zeugs erklären, bzw. mir den fixfertigen Code liefern. ;-) Ich habe nämlich ein kleines Problem, meine Java Kenntnisse sid sehr basic... :-( (2 Semester im Studium)

                  den fixfertigen Code kann ich dir natürlich nicht liefern. Erstens kannst du dir meinen Stundenlohn nicht leisten und zweitens kann ich nichts programmieren, da ich immer noch nicht deine Vorgehensweise verstehe.
                  Ich sag nur - ein Aktivitätsdiagramm wäre hilfreich ;) lernste wahrscheinlich alles noch im Studium.

                  _Falls_ ich dich bis hier her richtig verstanden habe, ist dein Arbeitsweg dieser: Du bekommst eine neue Datei, diese schickst du an die User, die sie öffnen und verändern (woher kennen sie die Neuerungen?). Die geänderte Datei speichern die User dann auf ihrer Festplatte. Richtig oder falsch?

                  Du könntest nun mit Java einen Client schreiben, der ganz unabhängig von HTTP und vom Webbrowser funktioniert. Einfach mit einer eigenen Oberfläche.
                  In diesem Programm hast du drei verschiedene Dinge: Model (deine XML-Daten) View (die Oberfläche) und Controll (was geschieht mit den Daten).
                  Mach dir einen Plan, wie du diese drei Dinge im Klartext beschreiben würdest.

                  Anschliessend suchst du dir dein Werkzeug zusammen. Für das Model würdest du am besten dom4j nutzen, die view würde ich zumindest mit swt umsetzen aber für dich ist ja auch swing eine alternative. Das Control kommt mit den Standard-Java-Klassen aus.

                  Studierst du Informatik und machst gerade ein Praktikum? Dann wäre jetzt die perfekte Zeit mit Java anzufangen ;)

                  liebe Grüße aus Berlin
                  lina-

                  --
                  Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
                  1. Halli Hallo

                    Was für ein toller Tag heute...zuerst habe ich heute morgen verpennt, dafür kam dann auch postwendend meine Lösung. Das Problem ist ganz trivial zu lösen. Ich kann das instance Objekt bereits dynamisieren. Einfach toll!!! :-)

                    Ich sag nur - ein Aktivitätsdiagramm wäre hilfreich ;) lernste wahrscheinlich alles noch im Studium.

                    Du beleidigst mich ein bisschen, ich bin seit 4 Monaten fertig mit meinem Studium. ;-) Arbeite nun seit 2,5 Monaten in einer Stromfirma. Gut, ich habe nie Informatik, sondern Wirtschaftsinformatik studiert.

                    Studierst du Informatik und machst gerade ein Praktikum? Dann wäre jetzt die perfekte Zeit mit Java anzufangen ;)

                    Werde ich dieses Jahr machen, habe auch die Bewilligung meines Chefes erhalten einen Java Kurs zu belegen. Ich habe dabei an den Sun Java Certified Programmer gedacht, ist der gut?

                    liebe Grüße aus der immer noch nebligen Schweiz "Man wohnt auch nicht im Unterland".

                    Roger

                    1. moin Roger :)

                      Was für ein toller Tag heute...zuerst habe ich heute morgen verpennt, dafür kam dann auch postwendend meine Lösung. Das Problem ist ganz trivial zu lösen. Ich kann das instance Objekt bereits dynamisieren. Einfach toll!!! :-)

                      Wirklic? Wie das denn? Würde mich ja auch interessieren.

                      Ich sag nur - ein Aktivitätsdiagramm wäre hilfreich ;) lernste wahrscheinlich alles noch im Studium.

                      Du beleidigst mich ein bisschen, ich bin seit 4 Monaten fertig mit meinem Studium. ;-) Arbeite nun seit 2,5 Monaten in einer Stromfirma. Gut, ich habe nie Informatik, sondern Wirtschaftsinformatik studiert.

                      Ähm... mal ehrlich - du hast Wirtschaftsinformatik studiert und lieferst solche Problembeschreibungen? Gerade als Wirtschaftsinformatiker sollte man doch gelernt haben EDV- und Fachwissen geschickt zu kommunizieren. Aber gut... manchmal sieht man ja den Wald vor lauter Bäumen nicht ;)
                      Im übrigen bin ich wegen diesem Satz "meine Java Kenntnisse sid sehr basic... :-( (2 Semester im Studium)" dem Irrtum erlegen, dass du noch studierst (hab den fehlenden Punkt für 2. nicht bemerkt)

                      Werde ich dieses Jahr machen, habe auch die Bewilligung meines Chefes erhalten einen Java Kurs zu belegen. Ich habe dabei an den Sun Java Certified Programmer gedacht, ist der gut?

                      Der ist brauchbar für den Einstieg - jep.

                      liebe Grüße aus Berlin
                      lina-

                      --
                      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
  2. Hallo Roger,

    In Zeiten, wo man mit Ajax nicht nur waschen kann, könnte ein XMLHttpRequest() für Dich in Frage kommen...

    Mit freundlichem Gruß
    Micha

    --
    www.derletztekick.de
    1. moin derletztekick :)

      In Zeiten, wo man mit Ajax nicht nur waschen kann, könnte ein XMLHttpRequest() für Dich in Frage kommen...

      auch mit Ajax kann man keine Dateien auf der Festplatte des Users speichern - und wenn doch möchte ich sofort wissen wie das geht und das ganze als Sicherheitslücke ganz groß bekanntgeben.

      liebe Grüße aus Berlin
      lina-

      --
      Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
      1. Hallo lina-,

        Das _schreiben_ habe ich wohl übersehen, ich dachte es scheitert am einlesen; darum ging es mir.

        Ich bin untröstlich Dir daher sagen zu müssen, dass Du nichts verkünden kannst :)

        Mit freundlichem Gruß
        Micha

        --
        www.derletztekick.de
        1. Hallo!

          Das _schreiben_ habe ich wohl übersehen, ich dachte es scheitert am einlesen; darum ging es mir.

          Du kannst mit einem XMLHttpRequest aber auch keine lokalen Files einlesen! Du kannst nur Webserverresourcen anfordern.

          mfg
            frafu

          1. Hallo FraFu,

            Liegt Seite und das File, das angefordert wird, auf dem selben PC, gehts, da braucht man keinen Server

            Mit freundlichem Gruß
            Micha

            --
            www.derletztekick.de