Aprendizaje de operaciones de archivos (1) Lectura y escritura de archivos

operaciones de java en archivos

En cuanto a la lectura y escritura de archivos, Xiao Yuan no sigue el marco de artículo habitual para escribir este artículo, Xiao Yuan escribe las notas de este capítulo basándose en casos.

Creación de archivos

La creación de un archivo es relativamente simple. Usando File file = new File ("xxx") se puede crear una carpeta o un archivo. No discutiré mucho sobre el contenido de este resumen.

Eliminación de archivos

Para la eliminación de archivos, Xiao Yuan presenta directamente un caso, utilizando código Java para eliminar directamente los archivos de prueba creados por Xiao Yuan.
Código de prueba

public class Demo01Test {
    public static void main(String[] args) {
        File file = new File("G:\\test");
        deleteAllFile(file);
    }
    public  static  void deleteAllFile(File file){
        System.out.println("-----------------------");
        File[] files = file.listFiles();
        for (File file1 : files) {
            if(file1.isDirectory()){
                System.out.println("delete file"+file1);
                deleteAllFile(file1);
            }else{
                file1.delete();
            }
        }
        System.out.println("delete directory:"+file);
        file.delete();
        System.out.println("-------------------------");
    }
}

Resultados de la prueba
Inserte la descripción de la imagen aquí

Búsqueda de archivos

El requisito funcional del caso uno es mostrar todas las carpetas, y la implementación del código se muestra a continuación.

public class Demo04Recurison {
    public static void main(String[] args) {
        File file = new File("G:\\test");
        getAllFile(file);
    }
    public static void getAllFile(File dir){
        System.out.println(dir);
        File[] files = dir.listFiles();
        for (File f :
                files) {
            if (f.isDirectory()){
                getAllFile(f);
            }else {
                System.out.println(f);
            }
        }
    }
}

Resultados de la
Inserte la descripción de la imagen aquí
prueba Los resultados de la prueba muestran que todos los archivos y carpetas buscados no tienen problemas.

Caso dos

El requisito del Caso 2 es generar todos los archivos que terminan en .txt. Primero cargue el código, como se muestra a continuación.

public class Demo04Recurison {
    public static void main(String[] args) {
        File file = new File("G:\\test");
        findAllFiles(file);
    }
    public static void findAllFiles(File dir){
        File[] files = dir.listFiles();
        for (File f :
                files) {
            if (f.isDirectory()) {
                findAllFiles(f);
            }else{
                if(f.toString().toLowerCase().endsWith(".txt")){
                    System.out.println(f);
                }
            }
        }
    }
}

Inserte la descripción de la imagen aquí
Con todo, la idea general de la búsqueda de archivos es hacer juicios condicionales sobre el archivo de destino cuando se recorre el archivo de forma recursiva, a fin de seleccionar el archivo de destino.
Para los filtros de archivos de búsqueda, la desventaja del código anterior es que una vez formado el código, significa que la función del código es fija. Si quieres realizar diferentes funciones, debes reescribir el código. Si quieres cambiar esto situación, debe utilizar la interfaz para buscar archivos. La función define una plantilla fija,

Caso tres

Utilice el filtro FileFilter para realizar la búsqueda de archivos, el código fuente de FileFilter es el siguiente.

@FunctionalInterface
public interface FileFilter {
    /**
     * Tests whether or not the specified abstract pathname should be
     * included in a pathname list.
     *
     * @param  pathname  The abstract pathname to be tested
     * @return  <code>true</code> if and only if <code>pathname</code>
     *          should be included
     */
    boolean accept(File pathname);
}

Nota, He aquí por qué no hay una clase abstracta para la función de interfaz, porque la interfaz por defecto agrega una función abstracta, y mira el siguiente código.
Inserte la descripción de la imagen aquí
Por lo tanto, la palabra resumen no se ve en FileFilter. A continuación, Xiaoyan usará clases internas anónimas y expresiones lambda para implementar el
método de caso de filtrado de archivos uno (clase interna anónima)
directamente en el código. Primero, escriba la clase de implementación de la interfaz FileFilter.

public class FileFilterImpl implements FileFilter{
    @Override
    public boolean accept(File pathname) {
        /*
            过滤的规则:
            在accept方法中,判断File对象是否是以.java结尾
            是就返回true
            不是就返回false
         */
        //如果pathname是一个文件夹,返回true,继续遍历这个文件夹
        if(pathname.isDirectory()){
            return true;
        }
        return pathname.getName().toLowerCase().endsWith(".java");
    }
}

Clase de prueba

public class Demo01Filter {
    public static void main(String[] args) {
        File file = new File("c:\\abc");
        getAllFile(file);
    }
    public static void getAllFile(File dir){
        File[] files = dir.listFiles(new FileFilterImpl());//传递过滤器对象
        for (File f : files) {
            if(f.isDirectory()){
                getAllFile(f);
            }else{
                System.out.println(f);
            }
        }
    }
}

Método dos (implementación de expresión lambda)
Para revisar y consolidar la lección anterior, se utilizan expresiones lambda. El método dos cambiará la clase de implementación de la interfaz en expresiones lambda

public class Demo02Test {
    public static void main(String[] args) {
        File file = new File("G:\\test");
        getTargetFile(file);
    }
    public static void getTargetFile(File dir){
        //采用匿名内部类的方式
        File [] files =null;
        /*files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith("java");
            }
        });
        //采用lambda表达式。
        files=dir.listFiles((File pathname)->{
            return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith("java");
        });*/
        //优化lambda 表达式
        files=dir.listFiles((pathname)-> pathname.isDirectory()||pathname.getName().toLowerCase().endsWith("txt"));

        for (File file :
                files) {
            if (file.isDirectory()){
                getTargetFile(file);
            }else {
                System.out.println(file);
            }
        }
    }
}

Resultado de la prueba:
Inserte la descripción de la imagen aquí
Hasta ahora, se han revisado las operaciones relacionadas con el archivo. El próximo capítulo revisará las operaciones relacionadas con el flujo del archivo.

Supongo que te gusta

Origin blog.csdn.net/xueshanfeitian/article/details/106857942
Recomendado
Clasificación