codestory

Manipulieren von Dateien und Verzeichnissen in Java

  1. Die Überblick
  2. java.io.File
  3. Den Verzeichnis erstellen
  4. Der File Filter
  5. Die Sub-File listen
  6. Den Name bearbeiten (Rename)

1. Die Überblick

In der Praxis müssen Sie regelmäßig mit der Datei und Ordner im System umgehen. Die Aktionen hier sind hinzufügen, löschen, und den Namen ändern. Java bietet Ihnen 2 Class um diese Aktion zu bearbeiten:
  • java.io.File
  • java.nio.file.Files
java.io.File
Die Class java.io.File vertretet eine File oder einen Odner (directory) des System. Es wird in Java ab der Version von 1.0 eingeführt
java.nio.file.Files
In der Version von 7.0 fügt Java die Class java.nio.file.Files ein. Das vereinfacht die Aktionen mit der File und dem Odner. Alle Methode von der Class sind static und natürlich (static & nature)
Im Dokument führe ich nur die Verwendung von der Class java.io.File, Sie können die java.nio.file.Files bei ... sehen:
  • Thao tác với tập tin và thư mục sử dụng Java NIO Files

2. java.io.File

Die Class java.io.File vertretet eine File oder einen Ordner im System, es vertretet einen Pfad (pathname). Das folgende Beispiel erstellt ein Objekt File , das einen Pfad auf Windows oder Unix vertretet
// Window
File apath1 = new File("C:/mydocument/test.txt");
File apath2 = new File("C:/mydocument/java");

// Unix
File apath3 = new File("/mydocument/test.txt");
File apath3 = new File("/mydocument/java");
java.io.File kann einen Pfad (pathname) vertreten und der Pfad kann im System nicht existieren. Wenn existieren, kann er ein Ordner (directory) oder eine Datei (file) sein.
Das folgende einfache Beispiel erstellt ein Objekt File , die einen Pfad vertretet und prüft seine Existenz, schreit die Information auf falls der Pfad existiert
FileInfoExample.java
package org.o7planning.filedirectory;

import java.io.File;
import java.util.Date;

public class FileInfoExample { 
	public static void main(String[] args) { 
		// Ein Objekt File zur Vertretung eines Pfad erstellen
		File apath = new File("C:/test/mytext.txt");

		// Die Existenz prüfen .
		System.out.println("Path exists? " + apath.exists()); 
		if (apath.exists()) { 
			// Prüfen, ob 'apath' ein Verzeichnis ist oder nicht?
			System.out.println("Directory? " + apath.isDirectory());

			// Prüfen, ob 'apath' ein Pfad ist oder nicht?
			System.out.println("Hidden? " + apath.isHidden());

			// Der einfache Name.
			System.out.println("Simple Name: " + apath.getName());

			// Der absolute Pfad.
			System.out.println("Absolute Path: " + apath.getAbsolutePath());

			// Die Größe der File testen ( nach Byte):
			System.out.println("Length (bytes): " + apath.length());

			// Die Zeitpunkt zur letzten Änderung (die Milisekunden)
			long lastMofifyInMillis = apath.lastModified();
			Date lastModifyDate = new Date(lastMofifyInMillis); 
			System.out.println("Last modify date: " + lastModifyDate); 
		} 
	} 
}

3. Den Verzeichnis erstellen

Die File bietet 2 Methode zur Erstellung eines Ordner:
Die Methode
Die Bezeichnung
public boolean mkdir()
Den Ordner durch den Pfad erstellen. Beachten Sie, der Ordner wird nur erstellt wenn der Vater-Ordner existiert.
public boolean mkdirs()
Den Ordner durch den Pfad erstellen, einschließend den Vater-Ordner auch wenn er existiert nicht
MakeDirExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class MakeDirExample {

	public static void main(String[] args) {

		File dir1 = new File("C:/test2/test3");

		System.out.println("Pathname: " + dir1.getAbsolutePath());
		System.out.println("Path Exists? " + dir1.exists());
		System.out.println("Parent Path Exists? " + dir1.getParentFile().exists());

		// Mit mkdir() wird das Verzeichnis erstellt wenn der Vaterverzeichnis existiert.
		boolean created = dir1.mkdir();

		System.out.println("Directory created? " + created);

		System.out.println("--------------------");

		File dir2 = new File("C:/test2/test3/test4");

		System.out.println("Pathname: " + dir2.getAbsolutePath());
		System.out.println("Exists? " + dir2.exists());

		//  
		created = dir1.mkdirs();

		System.out.println("Directory created? " + created);
	}

}

4. Der File Filter

Die Class java.io.File bietet einige Methode um die untergeodneten Datei und die untergeordneten Ordner in einem Ordner abzuholen. Und benutzen Sie FileFilter um die Datei zu filtern
Die Methode
Die Bezeichnung
static File[] listRoots()
Rückgabe eines Array von den Objekt File, die den Basisordner vertretet. Im Windows sind sie die Diskplatte (C:, D:,..), und im Unix ist es /
File[] listFiles()
Rückgabe eines Array von den Objekt File, die die Datei und die untergeordneten Ordner von dem jetzigen Ordner sind
File[] listFiles(FilenameFilter filter)
Rückgabe eines Array von den Objekte File, diedie die Datei und die untergeordneten Ordner von dem jetzigen Ordner sind, und entspricht dem Filter FilenameFilter
File[] listFiles(FileFilter filter)
Rückgabe eines Array von den Objekte File, diedie die Datei und die untergeordneten Ordner von dem jetzigen Ordner sind, und entspricht dem Filter FilenameFilter
String[] list()
Rückgabe auf einem Array von Pfad. Sie sind die Pfade von der Datei und von den untergeordneten Ordner der jetzigen Ordner
String[] list(FilenameFilter filter)
Rückgabe auf einem Array von Pfad. Sie sind die Pfad von der Datei und von den untergeordneten Ordner der jetzigen Ordner und entspricht dem FiltenameFilter auf die Parameters
Zum Beispiel: die Basisordner auflisten
RootFilesExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class RootFilesExample {

    public static void main(String[] args) {


        File[] roots = File.listRoots();
        
        for(File root: roots)  {
            System.out.println(root.getAbsolutePath());
        }

    }

}
Das folgende Beispeil listet alle Datei und untergeordnete Ordner eines Ordner auf:
FileListExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class FileListExample {

    public static void main(String[] args) {
       
        System.out.println("File[] listFiles():\n");

        File dir = new File("C:/test");

        File[] children = dir.listFiles();

        for (File file : children) {
            System.out.println(file.getAbsolutePath());
        }

        System.out.println("\n-----------------------");
       
        System.out.println("String[] list():\n");

        String[] paths = dir.list();

        for (String path : paths) {
            System.out.println(path);
        }
    }

}
java.io.FileFilter
** FileFilter **
package java.io;


@FunctionalInterface
public interface FileFilter {
 
    boolean accept(File pathname);


}
Das folgend einfache Beispiel verwendet FileFilter um die Datei mit der "txt" im Ordner zu filtern:
TxtFileFilter.java
package org.o7planning.filedirectory;

import java.io.File;
import java.io.FileFilter;

public class TxtFileFilter implements FileFilter {

	// Nur 'pathname' als die File und mit der Extension als txt akzeptieren.
	@Override
	public boolean accept(File pathname) {

		if (!pathname.isFile()) {
			return false;
		}

		if (pathname.getAbsolutePath().endsWith(".txt")) {
			return true;
		}

		return false;
	}

}
FileFilterExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class FileFilterExample {

    public static void main(String[] args) {

        File dir = new File("C:/test");

        File[] txtFiles = dir.listFiles(new TxtFileFilter());

        for (File txtFile : txtFiles) {
            System.out.println(txtFile.getAbsolutePath());
        }
    }

}
java.io.FilenameFilter
** FilenameFilter **
package java.io;

@FunctionalInterface
public interface FilenameFilter {
    /**
     * Tests if a specified file should be included in a file list.
     *
     * @param   dir    the directory in which the file was found.
     * @param   name   the name of the file.
     * @return  <code>true</code> if and only if the name should be
     * included in the file list; <code>false</code> otherwise.
     */
    boolean accept(File dir, String name);

}
Das Beispiel benutzt FilenameFilter:
TxtFilenameFilter.java
package org.o7planning.filedirectory;

import java.io.File;
import java.io.FilenameFilter;

public class TxtFilenameFilter implements FilenameFilter {

	// den Pfad mit dem Suffix '.txt' akzeptieren
	@Override
	public boolean accept(File dir, String name) {

		if (name.endsWith(".txt")) {
			return true;
		}

		return false;
	}

}
FilenameFilterExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class FilenameFilterExample {

    public static void main(String[] args) {

        File dir = new File("C:/test");

        File[] txtFiles = dir.listFiles(new TxtFilenameFilter());

        for (File txtFile : txtFiles) {
            System.out.println(txtFile.getAbsolutePath());
        }
    }

}

5. Die Sub-File listen

Die Klasse java.io.File bietet Sie einige Methode zur Auflistung der Ordner und der Datei, die die direkt untergeordnerten Datei vom jetzigen Ordner. Das folgende Beispeil benutzt die Rekursion zur Auflistung der Nachkommensordner (Tochter, Enkel...) und die Nachkommensdatei von einem Ordner
RecursiveFileExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class RecursiveFileExample {

	private void fetchChild(File file) {

		System.out.println(file.getAbsolutePath());

		if (file.isDirectory()) {

			File[] children = file.listFiles();

			for (File child : children) {
				// ​​​​​​​(Recursive)
				this.fetchChild(child);
			}
		}

	}

	public static void main(String[] args) {

		RecursiveFileExample example = new RecursiveFileExample();

		File dir = new File("C:/test");

		example.fetchChild(dir);

	}

}

6. Den Name bearbeiten (Rename)

Verwenden Sie die Methode rename() von der Klass File, Sie können den Namen ändern (oder auch den Pfad) von einer File oder einem Ordner. Wenn Sie den Pfad ändern, stellen Sie sicher, dass der Vaterordner existiert schon.
Den Name bearbeiten
Das folgend einfache Beispiel bezeichnet die Änderung des Namen einer Datei (oder dem Ordner) aber keine Änderung des Vaterpfad
SimpleRenameExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class SimpleRenameExample {

    public static void main(String[] args) {

        File srcFile = new File("C:/test/test2/abc.txt");

        File destFile = new File("C:/test/test2/def.txt");

        boolean renamed = srcFile.renameTo(destFile);
       
        System.out.println("Renamed: "+ renamed);

    }

}
Den Namen ändern, auch den Vaterpfad
Den Namen ändern und auch den Vaterpfad, es ist so ähnlich wie die Aktion "Cut" einer File oder eines Ordner zu einem anderen Ordner und dann den Namen ändern
beachten Sie: Mit Windows funktioniert die Methode File.rename() nicht wenn Sie den Pfad von einer Diskplatte zu einer anderen Diskplatte wechseln
RenameAndPathExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class RenameAndPathExample {

	public static void main(String[] args) {

		// Source file.
		File srcFile = new File("C:/test/test2/abc.txt");

		// Destination file.
		File destFile = new File("C:/test2/test3/defgh.txt");

		if (!srcFile.exists()) {
			System.out.println("Src File doest not exists");
			return;
		}

		// Die Erstellung vom Vaterverzeichnis der Destinationsfile
		destFile.getParentFile().mkdirs();

		boolean renamed = srcFile.renameTo(destFile);

		System.out.println("Renamed: " + renamed);

	}

}

Java Grundlagen

Show More