# Brauche euren Lösungsweg zu einem File/IO-Beispiel



## Kaan (24. Mai 2005)

Hallo,

Ich will euren Lösungsweg zum folgenden Programmbeispiel haben...und NEIN, es handelt sich hierbei umd KEINE Hausaufgabe! 

Es geht darum, dass mein Programmierlehrer und ich nicht zu einer Übereinstimmung zu folgendem Beispiel kommen...



Hier die Aufgabenstellung 1:1 vom Test abgetippt:

_
4. Schreiben sie folgende Applikation am Zettel: (22)

Erzeugen sie eine txt-Datei "2ahit_test.txt" als File-Objekt im aktuellen Verzeichnis und lassen sie überprüfen ob sich die Datei im aktuellen Verzeichnis befindet:

a) Wenn ja: lassen sie folgendes überprüfen/durchführen:
...
b) Wenn nein: lassen sie eine Fehlermeldung in die Datei schreiben:
...
_



Ich würde gerne von euch wissen, wie ihr das Beispiel programmieren würdet. Ich will meinen Code nicht posten, damit ich euch nicht von vornherein beeinflusse.

Danke.
MfG Kaan


----------



## mic_checker (24. Mai 2005)

Du erzeugst die Datei im aktuellen Verzeichnis und überprüfst anschließend ob die Datei im aktuellen Verzeichnis ist? Wofür? Nur zur Kontrolle oder wozu soll das dienen?


----------



## Kaan (24. Mai 2005)

Die txt-Datei wird als File-Objekt im aktuellen Verzeichnis angelegt und man soll eben überprüfen, ob sich die Datei im aktuellen Verzeichnis befindet. Ja, eigentlich nur zur Kontrolle...


----------



## Roar (24. Mai 2005)

if(new File("bum.txt").exists())
     bum();

?


----------



## Kaan (24. Mai 2005)

@Roar

*Genau so hab' ich es auch gemacht!!! (und die anderen 27 Schüler der Klasse auch...)*
Aber laut Lehrer ist es nicht die richtige Lösung...

Bevor ich den Code meines Lehrers poste, hätte ich gerne weitere Programmieransätze, wie man die Aufgabenstellung noch _anders_ interpretieren könnte...

Wäre nett, wenn ihr hier so ca. 5 verschiedene Lösungswege mit verschiedenen verwendeten Methoden auflisten könntet. (falls das überhaupt möglich ist...)

Was auch toll wäre, wenn auch andere Personen ihre eigenen Lösungsansätze posten würden.

Danke für eure geopferte Zeit!
MfG Kaan


----------



## Zilchinger (24. Mai 2005)

Irgendwie ist die Aufgabenstelleung etwas dubios!!!
Wenn die Datei existiert, mache irgendwas...
Wenn nicht schreibe eine Fehlermeldung in die Datei...

Wie soll das den gehen, wenn sie garnicht existiert?
Poste vielleicht mal die ganze Aufgabenstellung, vielleicht kann man dann mehr erahnen!


----------



## Beni (24. Mai 2005)

Könnte mir noch das hier vorstellen:


```
File file = new File( "bla.txt" );
file.createNewFile();
if( file.exists() ){
}
else{
}
```


----------



## TheSunToucher (24. Mai 2005)

> Erzeugen sie eine txt-Datei "2ahit_test.txt" als File-Objekt im aktuellen Verzeichnis...



hmmm, wenn mit "File-Objekt" eine Instanz von "java.io.File" gemeint ist, dann gibt der Satz keinen Sinn. Man kann keine Datei als File-Objekt erzeugen. Ein Java-File-Objekt ist quasi ein Verweis auf eine Datei, diese muss nicht existieren, kann aber mit "createNewFile()" oder "mkDir()" angelegt werden. Das Java-File-Objekt ist auch nicht veränderbar, wenn du beispielsweise ein "renameTo(File)" absetzt, zeigt das Java-File-Objekt ins leere.

Lange Rede kurzer Sinn, wollte nur mal angemerkt haben das aus dem Satz nicht klar wird ob ein datei, ein Java-File-Objekt oder beides angelegt werden soll!

 :meld:


----------



## Kaan (24. Mai 2005)

Also es ist so...

Mit einem "virtuellen" File-Objekt überprüft das Programm, ob diese Datei zufällig auch "reell" auf der Festplatte exisitiert.


----------



## Kaan (24. Mai 2005)

Also das ist die komplette Aufgabenstellung:







Und jetzt kommts...

Der Lehrer hat bei jedem...


```
if(file.exists()){
		
}
```

...durchgestrichen und durch...


```
if(file.getPath().equals(file.getParent())){
		
}
```

...ersetzt!!


Ich würde gerne von euch wissen, ob das für euch einen Sinn mit dem ergibt, was in der Angabe steht!

MfG Kaan


----------



## Beni (24. Mai 2005)

Der Pfad des Files soll gleich wie der Pfad des Parents sein. Das ist ja schonmal in sich ein Widerspruch...

Selbst wenn das korrekt ist, es ist ein Hack. Methoden wie "exists", "isDirectory" und etc. sind solchen Konstrukten vorzuziehen, ganz einfach, weil sie für genau solche Fragen geschrieben wurden.

Ich finde das ein ziemlich unsinniges if, und solange ich keine Erklärung höre, würde ich sagen "danke für ihren Beitrag, setzen, 6".

[Edit: ich wollt noch sagen, ich habe soeben ein Gegenbeispiel programmiert, welches den Vergleich noch seltsamer erscheinen lässt. Es kann verschiedene Arten Pfade geben, relative und absolute. Zwei java.io.File's können zu derselben echten Datei zeigen, aber getPath liefert andere Werte. Bei einer relativen Angabe kann getParent sogar null sein, in solch einem Fall liefert equals von String false.

Das würde bedeuten, dass der Vergleich bei _derselben_ Datei einmal false, und einmal true ergeben könnte, je nachdem, wie der Pfad eingegeben wurde.


```
File a = new File( "test.txt" );
        File b = new File( a.getCanonicalPath() );
        
        System.out.println( a.exists() + " " + a.getPath() + " " + a.getParent() );
        System.out.println( b.exists() + " " + b.getPath() + " " + b.getParent() );
```

Im übrigen sind "getPath" und "getParent" reine Stringmanipulationen, und haben mit dem Dateisystem überhaupt nichts zu tun. Ein Blick in den Quellcode von java.io.File zeigt dies. Die Nicht-/Existenz einer Datei beeinflusst den Rückgabewert von "getPath" und "getParent" nicht.
]


----------



## Kaan (24. Mai 2005)

Beni hat gesagt.:
			
		

> "danke für ihren Beitrag, setzen, 6".



 *looooooooool* 


Achja...in einem Skriptum, welches er uns gegeben hat, steht zu diesem Konstrukt folgendes drin:


```
if(f.getPath().equals(f.getParent())) // File f ist root
```

Was sagt ihr dazu..?


----------



## Beni (24. Mai 2005)

Als "root" würd ich, zumindest unter Windows, was wie "c:\" gelten lassen. Oder für ein Programm das Verzeichnis, indem es ausgeführt wird, aber garantiert keine willkürlich gewählte Textdatei (was wäre mit einer anderen Textdatei? Sie hätte das gleiche Recht "root" genannt zu werden. Aber da es per Definition nur ein Root gibt, passt das nicht zusammen.)

Und falls er den Parent meint; dass "getParent" sogar null zurückgeben kann, obwohl es in Wirklichkeit einen Parent gibt, steht in meinem Edit, das ich da oben noch eingeflickt habe (sorry, das war bevor du was geschrieben hast). Da wäre das auch eine sehr heikle Aussage.

Wenn f in irgendeiner Form tatsächlich das Root wäre, dann würde der Ausdruck mit "false" evaluiert, und das war wohl auch nicht der Sinn (ok, er könnte einfach ein "!" vergessen haben).


----------



## TheSunToucher (24. Mai 2005)

Das mit dem "root" raff ich auch nicht. Willst du die roots des Systems dann geht das über:


```
File.listRoots();
```


----------



## comp89 (24. Mai 2005)

kaan, du hast vergessen, dass er bei getParent und getPath die Methodenklammern vergessen hat und selbst wenn der ansatz stimmen würde, dann so sicher nicht!


----------



## Kaan (24. Mai 2005)

@comp89 aka Stephan 

Bei mir hat er sich ganz verschrieben und hat statt getParent() die nicht existierende Methode getRoot() hingeschrieben^^


----------



## TheSunToucher (24. Mai 2005)

Mal nebenbei, was ist das für eine Schule? Also seid ihr auf der Berufsschule, FOS o.ä. oder ist das so eine Programmieren AG in der 9ten Klasse?


----------



## Kaan (25. Mai 2005)

Wir gehen aufs TGM (www.tgm.ac.at). Das ist eine HTL (Höhere Technische Lehranstalt) in Wien. Dort gibt es verschiedene Zweige in Richtung Elektronik, Maschinenbau, usw... Wir gehen in Informations-Technologie. Da gibt es dann so Fächer wie Programmieren, Medientechnik, Netzwerktechnik usw.

Hört sich jetzt zwar toll an...aber naja...ich hätte mir mehr erwartet^^


----------



## TheSunToucher (25. Mai 2005)

Mit was in Deutschland kann man das gleichsetzen? Ist das so wie die "Fach Ober Schule" die dich auf's Studium vorbereitet oder mehr wie eine Fachhochschule?


----------



## Kaan (25. Mai 2005)

Naja, ich kenne mich mit dem Schulsystem von Deutschland nicht ganz aus. So eine HTL dauert 5 Jahre und man kann einer HTL nach Abschluss der achten Schulstufe beitreten. HTLs bieten aber auch Abendschulen usw. für Erwachsene an.


----------



## TheSunToucher (25. Mai 2005)

5 Jahre nach der 8ten Klasse? Hört sich irgendwie nach Abitur an... Abitur habt ihr doch auch, oder? Und wenn du damit fertig bist wird studiert?


----------



## Kaan (25. Mai 2005)

Abitur (Matura) ist bei uns am Ende der 5. Klasse der HTL und wer dann noch studieren will kann studieren gehen^^


----------



## Kaan (26. Mai 2005)

Zurück zum Thema: Wo müsste das File liegen, damit  file.getPath().equals(file.getParent()) true ergibt?


----------



## Bleiglanz (26. Mai 2005)

das wird imho NIE true ergeben, evtl. bei ganz pathologischen strings ("" oder ?)

dabei ist überhaupt keine Datei beteiligt, das ist reine Stringbearbeitung!

```
java.io.File f = new java.io.File("völlig/egal/was/hier/steht");
System.out.println(f.getPath()+"="+(f.getParent()));
```


----------

