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
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
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);
}
}
}
}
}
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.
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:
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.