Input/Output Dateiendung ändern

blauerninja

Mitglied
Hallo,
ich muss in einer Datei die Daten blockweise verschlüsseln und darf dabei keine neue Datei erzeugen. Somit ist schon mal klar, dass ich RandomAccessFile nutzen muss. Die Enddatei soll aber die zusätzliche Dateiendung .crypt besitzen. Und dies ist mein Prob. Wie kann ich also die Endung bzw. den Dateinamen(?) ändern, ohne eine neue Datei zu schreiben?

Eine Idee wäre die renameTo() Methode von File. Diese Methode scheint aber eine neue Datei zu erzeugen, also was ich nicht will.

Hat jemand eine Idee?
 
N

nillehammer

Gast
Eine Idee wäre die renameTo() Methode von File. Diese Methode scheint aber eine neue Datei zu erzeugen, also was ich nicht will.
Mitnichten! Es wird hier nur ein neues File-Objekt benötigt, aber keine neue Datei auf dem Dateisystem erzeugt. Habe das mit folgendem Code Zeile für Zeile im Debug Modus überprüft. Zu keiner Zeit wird eine zweite Datei erzeugt.

Java:
public static void main(final String[] args ) throws Exception {
	
  final String originalFilePath = "<PFAD_ZU_DEINER_DATEI>";

  // Hier wird ein File-OBJEKT erzeugt. Die Datei auf dem 
  // Dateisystem exisitert noch nicht.
  final File original = new File(originalFilePath);

  // Hier wird sie auf dem Dateisystem angelegt.		
  original.createNewFile();

  // Hier wird nur ein neues File-OBJEKT erzeugt
  // Das ist nicht das gleiche, wie eine neue Datei zu schreiben.
  final File renamed = new File(originalFilePath + ".crypt");
		
  // Hier wird die Umbenennung auf dem Dateisystem vollzogen.
  original.renameTo(renamed);
}
 
Zuletzt bearbeitet von einem Moderator:

blauerninja

Mitglied
Wieso sind danach zwei Dateien auf der Platte, wenn ich doch nur eine Datei umbenenne?

Java:
  private static void rename(File file) {
    String filePath = file.getAbsolutePath();
    File renamedFile;

   // canDecrypt() prüft, ob Endung FILE_ENDING (".crypt") hinten im Pfad steht
   // beim Decodieren soll die Endung ".crypt" weg, beim Verschlüsseln, soll sie hinzu
   // Problem: zwei Dateien danach vorhanden
    if (canDecrypt(file)) {
      renamedFile = new File(filePath.substring(0, filePath.length() - FILE_ENDING.length()));
    } else {
      renamedFile = new File(filePath + FILE_ENDING);
    }

    file.renameTo(renamedFile);
  }
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Wieso sind danach zwei Dateien auf der Platte, wenn ich doch nur eine Datei umbenenne?
Die Javadoc-Beschreibung der Methode
Code:
renameTo
spricht ja von Plattformabhängigkeit. Ich hatte es gestern unter OpenSuse-Linux getestet und dachte, es könnte bei Windows evtl. anders sein. Habe es jetzt nochmal unter Windows 7 getestet. Auch dort sind zu keiner Zeit zwei Dateien vorhanden.

Der von dir gepostete Codeschnipsel ist so also erstmal richtig. Entweder du erzeugst woanders Files (evtl. irgendwo ein FileOutputStream?). Oder beim
Code:
renameTo
tritt ein Fehler auf. Lass Dir mal dessen Ergebnis ausgeben:
Java:
final boolean renameResult = file.renameTo(renamedFile);
System.out.println("Rename result: " + renameResult);
Bei
Code:
false
stimmt was nicht (Originaldatei nicht vorhanden?, Originaldatei evtl. noch lesend/schreibend geöffnet, deswegen kein
Code:
renameTo
möglich?).
 
Zuletzt bearbeitet von einem Moderator:

blauerninja

Mitglied
Java:
  public static void main(String[] args) {
    if (!validateArgs(args)) {
      printManPage();
      return;
    }

    File file = new File(args[1]);
    if (!validateFile(file)) {
      return;
    }

    rename(file);

    int key = generateKey(args[3]);
    crypt(file, key);
  }


  private static void rename(File file) {
    String filePath = file.getAbsolutePath();
    File renamedFile;

    if (canDecrypt(file)) {
      renamedFile = new File(filePath.substring(0, filePath.length() - FILE_ENDING.length()));
    } else {
      renamedFile = new File(filePath + FILE_ENDING);
    }

    file.renameTo(renamedFile);
  }


  private static void crypt(File originalFile, int key) {
    int seekPosition = 0;

    try {
      RandomAccessFile file = new RandomAccessFile(originalFile, "rwd");
       .
       .
       .
    } catch () {  }
  }

Zuerst prüf ich die an das Programm übergebenen Parameter und mit validateFile(), ob die Datei existiert, gelesen und beschrieben werden darf. Vor der Umverschlüselung wird das File umbenannt. Es wird true rausgegeben, wenn ich das Code-Schipsel einfüge. Im Ordner exestieren dann 2 Dateien, das korrekt umbenannte, was eine Kopie der Originaldatei ist und die Originaldatei, die leider leer ist. Ein Fehler beim Verschlüsseln, weil ich noch nicht ganz verstanden habe, wie ich 4 Bytes in der Datei mit einem 32-Bit-Schlüssel XOR-Verschlüsseln soll. Dies ist aber ein anderes Thema.

Könnte es daran liegen, dass RandomAccessFile eine neue Datei erstellt?
 
N

nillehammer

Gast
Könnte es daran liegen, dass RandomAccessFile eine neue Datei erstellt?
Ja, wenn Du ihm bei der Erzeugung ein
Code:
File
-Objekt übergibst, dass eine noch nicht bestehende Datei repräsentiert. Das genau ist Dein Fehler:
- In Zeile 7 erzeugst Du das
Code:
File
-Objekt für die zu verschlüsselnde Datei
- In Zeile 12 benennst Du die Datei auf dem Dateisystem um
- In Zeile 15 rufst Du die Methode
Code:
crypt
mit dem original
Code:
File
-Objekt auf. Dieses repräsentiert aber garnicht die umbenannte Datei, sondern die Originaldatei. Die gibt es auf dem Dateisystem wegen Zeile 12 ja nicht mehr. In der Zeile 37 wird darum eine neue Datei erzeugt.


Du musst also entweder erst crypten und dann umbenennen oder Deine crypt-Methode mit dem
Code:
File
-Objekt aufrufen, dass die umbenannte Datei repräsentiert.
 
Zuletzt bearbeitet von einem Moderator:

blauerninja

Mitglied
Ah, so läuft das. Ich bin davon ausgegangen, dass das Objekt file umgewandelt wird, sprich dann das selbe Objekt ist, bloß mit neuem Dateinamen. Vielen Dank für die rasche Hilfe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
simon1101 Überprüfen ob Dateiendung stimmt Allgemeine Java-Themen 4
M Eigene Dateiendung? Allgemeine Java-Themen 3
D Icon für eigene Dateiendung Allgemeine Java-Themen 7
H Symbol je Dateiendung? Allgemeine Java-Themen 6
W Dateiendung Allgemeine Java-Themen 5
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
Z Java Testklassenvariable ändern im Hauptprogramm Allgemeine Java-Themen 5
L Uhrzeit von 24-Uhr zu 12-Uhr ändern Allgemeine Java-Themen 2
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
J Jasper Reports - Subreport zur Laufzeit ändern Allgemeine Java-Themen 6
N Variablen Array Länge ändern. Allgemeine Java-Themen 8
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
L Hintergrundfarbe jedes spinner-Elements ändern Allgemeine Java-Themen 1
Q Eclipse Escape Sequenzen Farbe ändern Allgemeine Java-Themen 4
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E javax.mail sene Type ändern Allgemeine Java-Themen 2
J Farbe von Buttons mehrmals ändern Allgemeine Java-Themen 5
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
B ImageView Farbe ändern Allgemeine Java-Themen 3
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
T ändern neue Java Versionen was an der Programmiersprache? Allgemeine Java-Themen 15
R Zeitformat ändern Allgemeine Java-Themen 18
olfibits Erste Schritte Konsolentitel ändern Allgemeine Java-Themen 3
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
B Input/Output Datei ändern Allgemeine Java-Themen 9
T JasperReport Hintergrundfarbe wertabhängig ändern Allgemeine Java-Themen 3
sandaime CMD aufrufen und aktuellen pfad ändern Allgemeine Java-Themen 11
M Variable ändern bei jedem Schleifendurchlauf Allgemeine Java-Themen 32
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
K eclipse Workspace ändern Allgemeine Java-Themen 2
J Properties file ändern Allgemeine Java-Themen 12
R WebDriver Firefox preferences ändern Allgemeine Java-Themen 0
W Input/Output Kann .properties Datei in kompilierter .jar nicht ändern Allgemeine Java-Themen 2
G Unix Passwort mit Java ändern? Allgemeine Java-Themen 3
M OOP Bildschirmauflösung des Systems ändern Allgemeine Java-Themen 0
Avarion Font von StyledDocument ändern Allgemeine Java-Themen 0
chuxXo System/JLayer Volume ändern Allgemeine Java-Themen 0
Thallius App-Sprache in der App ändern. Wo ist mein Denkfehler? Allgemeine Java-Themen 6
Tausendsassa Interface Buttons Background ändern! Wie?? Allgemeine Java-Themen 10
E Apache POI Powerpoint Verlinkungen ändern Allgemeine Java-Themen 4
R Int Wert im Dialogfeld ändern Allgemeine Java-Themen 4
Ananaskirsche Best Practice Sprachen ändern für Consolenausgaben Allgemeine Java-Themen 2
P Sprache ändern ins Programm einbinden Allgemeine Java-Themen 6
M String an einem abschnitt ändern Allgemeine Java-Themen 14
S Name einer Musikdatei auslesen und ändern Allgemeine Java-Themen 8
M Threads Bildformat mit java ändern Allgemeine Java-Themen 2
x22 Hintergrund in Netbeans ändern Allgemeine Java-Themen 3
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
C Input/Output Bestimmte Zeile in Datei ändern. Allgemeine Java-Themen 13
B Swing Look And Feel ändern Allgemeine Java-Themen 15
jstei001 Reguläre Ausdrücke bearbeiten/ändern Allgemeine Java-Themen 14
H CLASSPATH im Javaprogramm ändern Allgemeine Java-Themen 5
S Datentypen Eine Variable von String zu Int ändern Allgemeine Java-Themen 5
P ganze Zeilen in einem File mit .replace() ändern. Allgemeine Java-Themen 10
Y Bildschirmauflösung ändern Allgemeine Java-Themen 5
P Wie bei log4j den Dateipfad der Logdatei zur Laufzeit ändern? Allgemeine Java-Themen 3
S Klassen .jar - eine .class datei ändern? Allgemeine Java-Themen 23
C Auf eine Methode von einer anderen Klasse aus ändern? Allgemeine Java-Themen 4
N .doc text ändern Allgemeine Java-Themen 12
X XML Dateien ändern Allgemeine Java-Themen 2
W LayoutManager Position der Componenten nachträglich ändern Allgemeine Java-Themen 12
A Ordnerberechtigungen ändern Allgemeine Java-Themen 10
Dit_ Registry, Preferences | Name des Knotens ändern. Allgemeine Java-Themen 2
R Windows - User Passwort ändern Allgemeine Java-Themen 2
S UML zur Laufzeit ändern Allgemeine Java-Themen 10
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
S TreeSet - Comparator ändern -> resort? Allgemeine Java-Themen 8
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
M Grösse eines JTabbedPane ändern Allgemeine Java-Themen 2
L Kurzfristig Bildschirmauflösung ändern Allgemeine Java-Themen 2
Burny91 JAR-Datei Icon ändern Allgemeine Java-Themen 2
W Dateiinfo auslesen/ändern Allgemeine Java-Themen 3
S Tastaturbelegung global ändern Allgemeine Java-Themen 5
Q .jar wird mit cmd gestartet - Zuordnung von Dateitypen ändern (Windows 7) Allgemeine Java-Themen 7
H Erstelldatum einer Datei ändern. Allgemeine Java-Themen 3
T Wie kann man bei CheckBoxTrees die Checkboxzustände ändern? Allgemeine Java-Themen 2
K Ordnername ändern Allgemeine Java-Themen 2
Dissi Gammawerte des Grafiktreibers / System ändern? Allgemeine Java-Themen 3
E Objekt bei Serialisierung ändern Allgemeine Java-Themen 2
V Druckereigenschaften ändern? Allgemeine Java-Themen 17
G Jar File zur Laufzeit ändern. Allgemeine Java-Themen 4
C IP Adresse mit Java ändern? Allgemeine Java-Themen 9
A Ordnerrechte / Zugriffsrechte mit Java ändern? Allgemeine Java-Themen 10
M Dateinamen ändern Allgemeine Java-Themen 3
E *.class ändern/ersetzen/überschreiben. Allgemeine Java-Themen 9
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
G HashMap key ändern Allgemeine Java-Themen 5
K JFreeChart Achsenbeschriftung ändern? Allgemeine Java-Themen 4
Luma Arbeitsverzeichnis innerhalb externen Bibliothek ändern Allgemeine Java-Themen 2
T (Binary)Datei einlesen, Inhalt ändern, Datei schreiben Allgemeine Java-Themen 4
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben