Notas básicas de Java, ejercicios de clase de archivos, ejercicios de flujo de Io recursivos

Ejercicio de flujo de Io

* Según la dirección del flujo: flujo de entrada, flujo de salida

Dividido según el tipo de archivo : flujo de bytes, flujo de caracteres

Pasos de la operación de flujo de Io:
1. Manejo de excepciones
2. Lectura y escritura específicas
3. Cierre de flujo

Flujo común:

Flujo de bytes de entrada: InputStream
flujo de bytes de salida: OutputStream
archivo de flujo de bytes de entrada: FileInputStream
flujo de bytes de salida del archivo: FileOutputStream
buffer de flujo de bytes de entrada: BufferedInputStream
buffer de flujo de bytes de salida: BufferedOutputStream

Flujo de caracteres de entrada: Flujo de
caracteres de salida de FileReader: Flujo de caracteres de
entrada del búfer de FilieWriter Flujo de caracteres de
salida del búfer de BufferedReader : Escritura de búfer

Secuencia de entrada de objeto: ObjectInputStream Secuencia de
salida de objeto: ObjectOutputStream

Métodos comunes:

read () saca el archivo del disco de la computadora
write () guarda el valor o el archivo en el disco de la computadora
close () cierra la secuencia
newLine wrap

Serialización y deserialización de objetos dentro y fuera de archivos

Serialización: el proceso de convertir un objeto en una secuencia de bytes se denomina serialización del objeto. (Es común guardar archivos)
  Deserialización: El proceso de restaurar una secuencia de bytes en un objeto se llama deserialización de objetos.

Solo se pueden serializar objetos de clases que implementan las interfaces serializables y externalizables

 public static void main(String[] args) throws Exception{
    FileOutputStream fos = new FileOutputStream("E:\\A\\student.txt");
    // 输出对象流
    ObjectOutputStream oos = new ObjectOutputStream(fos);

    Student s1 = new Student(1, "张三", 18, 16.0);
   // 以序列化的形式,将对象写到文件 二进制文件
    oos.writeObject(s1);

    oos.close();
    fos.close();

    System.out.println("结束" );
}

Ejercicio 1

Leer una secuencia de bytes de un flujo de entrada de origen, luego deserializarlos en un objeto y devolverlo.

public static void main(String[] args) throws Exception{
    FileInputStream fis = new FileInputStream("E:\\A\\student.java");

    // 输入对象流
    ObjectInputStream ois = new ObjectInputStream(fis);

    // 读取一个对象: 将字节反序列化为对象

    Student o = (Student) ois.readObject( );

    System.out.println(o );

    ois.close();
}

Ejercicio 2

Cree un objeto de estudiante: atributo sid sage sname score
// escriba un método addOne (Student s, String file) para escribir la información de s en el archivo de destino
Una línea para cada estudiante: 1001-Han Meimei-18-98.5
Escriba una método deleteOne (int sid, String file) en el archivo línea especificada eliminación de datos sid
Tenga en cuenta que el archivo no se puede asociar con los flujos de entrada y salida
crea un archivo intermedio para modificar la información leída desde el archivo fuente se escribe en el archivo intermedio
eliminar el archivo de origen se renombra Archivo intermedio

Escriba un método addOne (Student s, String file) para escribir la información de s en el archivo de destino.

private static void addOne(Students s, String file) throws IOException {
   //创建输出流
    BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));
    bw.write(s.getSid()+"-"+s.getSage()+"-"+s.getSname()+"-"+s.getScore());
    bw.newLine();

    //关流
    bw.close();
}

Ejercicio 3

// Escribe un método deleteOne (int sid, String file) para borrar los datos de la fila del sid especificado en el archivo
private static void deleteOne (int i, String file) throws IOException {

File file1 = new File(file);
//输出流
BufferedReader br = new BufferedReader(new FileReader(file1));
//创建一个临时文件
File file2 = new File("E://A//f.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file2 ,true));
String c = null;

while ((c = br.readLine())!= null){
    String s = c;
    //根据给定字符拆分
    String[] split = s.split("-");
    System.out.println("拆分后字符串:"+ split[0]);
    int a = Integer.parseInt(split[0]);
    if (a==i){
        continue;
    }
    bw.write(c);
    bw.newLine();
}

//关流
br.close();
bw.close();
//删除原有的数据
boolean delete = file1.delete( );
System.out.println(delete );
//临时文件重命名
file2.renameTo(new File(file));

}

Ejercicio 4:

Método de diseño, pasar la ruta del archivo / carpeta, eliminar el archivo / carpeta

//设计方法,传入文件/文件夹路径删除该文件,文件夹
public static void test(File file) {
    //判断是否存在
    if (file.exists()) {
        //得到文件数组
        File[] files = file.listFiles();
        //遍历所有的子目录和文件
        for (File f : files) {
            //判断此抽象路径名表示的文件是否是一个标准文件。
            if (f.isFile()) {
                f.delete();//是文件就删除
            } else {
                test(f);//如果是文件夹就递归这里进入子文件夹中
            }
        }
        file.delete();//删除文件夹
    }
}

Ejercicio 5

// Tarea: método de diseño, pasar un entero n y devolver el resultado de su factorial

    public static int jc(int n){
        if (n==1){
            return 1;
        }else {
             return n * jc(n - 1);
             }
    }

Ejercicio 6

Escriba un método para obtener el tamaño en bytes del archivo / carpeta de parámetros

   public static void getLength(File file) {
       //判断是否是标准文件
        if(!(file.exists())){
            //不是标准文件
            System.out.println("文件路径错误");
        }
        //判断是否是文件夹
        if(file.isDirectory()){
            //得到文件数组
            File[] files = file.listFiles();
            //遍历文件数组
            for (File f:files){
                //递归
                getLength(f);
            }
        }
        a+=file.length();

    }

Ejercicio 7

Método de diseño:
enumere todos los archivos del bloc de notas en la carpeta A (a juzgar por el sufijo de cadena)

//全局静态属性,集合用来存储所有的文件名
  static ArrayList<String> arrs = new ArrayList<>();
    public static ArrayList job1(File file){
        if(file.exists()) {
            //获取文件数组
            File[] files = file.listFiles();
            //遍历文件数组,获得文件名
            for (File f : files) {
                //判断名字是不是。txt结尾
                if (f.getName().endsWith(".txt")) {
                    arrs.add(f.getName());
                } else {
                    job1(f);
                }
            }
            return arrs;
        }
        System.out.println("文件路径错误");
        return null;
    }

Ejercicio 8

Eliminar todos los archivos de la carpeta A

  private static void job2(File file) {
        //判断该文件是否存在
        if (file.exists()){
            //得到文件数组
            File[] files = file.listFiles();
            //遍历所有子目录和文件
            for(File f:files) {
                //判断文件是不是一个标准文件
                if (f.isFile()) {
                    //是的话删除该文件
                    f.delete();
                } else {
                    //不是文件就递归到子文件夹里,进行删除文件
                    job2(f);
                }
            }
            return;
        }
        System.out.println("文件路径错误");
    }

Ejercicio 9

Eliminar carpeta especificada

  private static void job3(File file) {
        //判断该文件是否存在
        if (file.exists()){
            //得到文件数组
            File[] files = file.listFiles();
            //遍历所有子目录和文件
            for(File f:files){
                //判断文件是不是一个标准文件
                if (f.isFile()){
                    //是的话删除该文件
                    f.delete();
                }else {
                    //不是文件就递归到子文件夹里,进行删除文件
                    job3(f);
                }
            }
            //删除文件夹
            file.delete();
            return;
        }
        System.out.println("文件路径错误");
    }

Ejercicio 10

Utilice la secuencia de caracteres para convertir los datos en el archivo a y escríbalos en el archivo B. Convertir mayúsculas a minúsculas Conversión minúsculas a mayúsculas Eliminar números

  public static void changeFile(String filea,String fileb) throws Exception {
        //缓冲字符输入流
        BufferedReader br = new BufferedReader(new FileReader(filea));
        //缓冲区字符输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter(fileb,true));

        int c=-1;
        while ((c=br.read())!= -1){
            if(65<=c&&c<=90){
                c+=32;
                bw.write(c);
                continue;
            }else if(97<=c&& c<=122){
                c-= 32;
                bw.write(c);
                continue;
            }else if(48<=c && c<= 57){
                continue;
            }
            bw.write(c);
        }
        br.close();
        bw.close();

    }
}

Lo que no esté bien escrito, ¡dame un consejo! !

Supongo que te gusta

Origin blog.csdn.net/CV_Ming/article/details/112219140
Recomendado
Clasificación