Manipulation de fichiers et de répertoires en Java

View more Tutorials:

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 à:
  • TODO Link!

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);

	}

}

View more Tutorials: