devstory

Manipulation de fichiers et de répertoires en Java

  1. Vue d'ensemble
  2. java.io.File
  3. Créez le répertoire
  4. Le filte du fichier
  5. Énumération des fichiers
  6. Changement le nom (du chemin)

1. Vue d'ensemble

En réalité, vous manipulez souvent des fichiers et des dossiers dans le système, les manipulations comprennent l'ajoutêmnt, l'effacement, le changement de nom. Java vous fournit 2 classes pour les faire:
  • java.io.File
  • java.nio.file.Files
java.io.File
La classe java.io.File représente un fichier (file) ou un répertoire du système (directory), elle est comprise dans Java depuis la version 1.0
java.nio.file.Files
Dans la version 7.0, Java ajoute la classe java.nio.file.Files, qui simplifie la manipulation des fichier et des répertoires, toutes ces méthodes de la classe sont statiques et de la nature (static & nature)
Dans ce poste, je mentionne uniquement l'utilisation de la classe java.io.File, vous pouvez voir l'instruction de l'utilisation de la classe java.nio.file.Files à:
  • Thao tác với tập tin và thư mục sử dụng Java NIO Files

2. java.io.File

La classe java.io.File représente un fichier ou un répertoire dans le système,qui représente un chemin (pathname). L'exemple suivante crée un fichier File qui représente un chemin sur Windows ou Unix:
// 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 peut représenter un chemin (pathname) qui ne peut pas exister réellement sur le système.S'il existe, il peut être un répertoire (directory) ou un fichier (file).
Le simple exemple suivant crée un objet File qui représente un chemin, et vérifie son existence, imprimer l'information de base si cechemin existe réellement:
FileInfoExample.java
package org.o7planning.filedirectory;

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

public class FileInfoExample { 
	public static void main(String[] args) { 
		// Créer un fichier représente un chemin.
		File apath = new File("C:/test/mytext.txt");

		// Vérifiez s'il existe.
		System.out.println("Path exists? " + apath.exists()); 
		if (apath.exists()) { 
			// Vérifiez si 'apath' est un fichier ou non?
			System.out.println("Directory? " + apath.isDirectory());

			// Vérifiez si 'apath' est un chemin caché?
			System.out.println("Hidden? " + apath.isHidden());

			// Le nom simple.
			System.out.println("Simple Name: " + apath.getName());

			// Le chemin absolu.
			System.out.println("Absolute Path: " + apath.getAbsolutePath());

			// Vérifiez la taille du fichier (en octets):
			System.out.println("Length (bytes): " + apath.length());

			// Dernière modification (en milli seconde)
			long lastMofifyInMillis = apath.lastModified();
			Date lastModifyDate = new Date(lastMofifyInMillis); 
			System.out.println("Last modify date: " + lastModifyDate); 
		} 
	} 
}

3. Créez le répertoire

La classe File fournit 2 méthodes de créer un répertoire:
Méthode
Description
public boolean mkdir()
Créer le répertoire donné par le chemin. Remarque: le répertoire est seulement créé quand le répertoire parent existe.
public boolean mkdirs()
Créer le répertoire donné par le chemin, comportant le répertoire parent s'il existe pas.
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());

		// Avec mkdir(), le répertoire est uniquement créé  si le répertoire parent existe.
		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. Le filte du fichier

La classe java.io.File fournit quelques méthodes pour extraire des sous- fichiers et des sous- répertoires dans un dossier. Et utilisez FileFilter pour filtrer ces lesdits fichiers.
Méthode
Description
static File[] listRoots()
Revient une gamme d'objets de fichier qui représente la racine des répertoires. Dans Windows elle sera des lecteurs (C:, D:,..), dans Unix c'est /
File[] listFiles()
Renvoie une gamme d'objets File, qui sont des sous- fichiers et des sous- répertoires du répertoire actuel.
File[] listFiles(FilenameFilter filter)
Renvoie une gamme d'objets File, qui sont des sous- fichiers et des sous- répertoires du répertoire actuel, et correspond au filtre de FilenameFilter sur le paramètre.
File[] listFiles(FileFilter filter)
Renvoie une gamme d'objets File, qui sont des sous- fichiers et des sous- répertoires du répertoire actuel, et correspond au filtre de FileFilter sur le paramètre.
String[] list()
Revient une gamme de chemins, qui sont des chemins des sous- fichiers et des chemins des sous- répertoires du celui du répertoire actuel.
String[] list(FilenameFilter filter)
Renvoie une gamme de chemins, qui sont des chemins des sous- fichiers et des chemins des sous- répertoires du celui du répertoire actuel, et correspond au filtre de FiltenameFilter sur le paramètre.
Par exemple, listez tous les répertoires principaux:
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());
        }

    }

}
L'exemple suivant énumère tous les sous- fichiers et les sous- répertoire d'un répertoire:
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);


}
L'exemple simple ci-desous utilise FileFilter pour filtrer des fichiers qui se trouve dans un répertoire avec l'extension "txt":
TxtFileFilter.java
package org.o7planning.filedirectory;

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

public class TxtFileFilter implements FileFilter {

	// Acceptez seulement 'pathname' est le fichier et son extension (extension) est txt.
	@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);

}
L'exemple utilise FilenameFilter:
TxtFilenameFilter.java
package org.o7planning.filedirectory;

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

public class TxtFilenameFilter implements FilenameFilter {

	// Acceptez des chemins (path) qui terminent par '.txt'
	@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. Énumération des fichiers

La classe java.io.File vous fournit quelques méthodes de l'énumérer des répertoires et des fichiers qui sont "enfant direct" du répertoire actuel. L'exemple suivant utilise la récursion pour lister tous des répertoires descendants et des fichiers descendants d'un répertoire.
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) {
				// Récursive (Recursive)
				this.fetchChild(child);
			}
		}

	}

	public static void main(String[] args) {

		RecursiveFileExample example = new RecursiveFileExample();

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

		example.fetchChild(dir);

	}

}

6. Changement le nom (du chemin)

Quand vous utilisez la méthode rename() de la classe File, vous pouvez changer le nom (ou le chemin aussi) d'un fichier ou d'un répertoire. Si vous changez le chemin, assurez- vous que le répertoire parent déjà existe.
Renommer
Le simple exemple ci- dessous change le nom d'un fichier (ou d'un répertoire) mais il ne change pas le chemin principal.
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);

    }

}
Le hangement le nomcomprend le chemin principal:
Le changement le nom et le changement le chemin principal sont semblable à l'action "Cut" d'un fichier ou un répertoire à un autre répertoire et ensuite changer son nom.
Remarque: Avec Windows, la méthode File.rename() ne fonctionne pas si vous changez le chemin à un autre lecteur.
RenameAndPathExample.java
package org.o7planning.filedirectory;

import java.io.File;

public class RenameAndPathExample {

	public static void main(String[] args) {

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

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

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

		// Créez le répertoire parent du fichier cible.
		destFile.getParentFile().mkdirs();

		boolean renamed = srcFile.renameTo(destFile);

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

	}

}

Java Basic

Show More