当前位置:网站首页>[simple implementation of file IO]

[simple implementation of file IO]

2022-07-06 00:32:00 DJL_ new_ life

( Click jump )

java Learning column

LeetCode Brush topic column


file IO example

review

  1. Information about document management ——File object : Traversal of file system tree 、 increase 、 Delete 、 Change 、 check
  2. Input 、 The output model

InputStream The device that reads the data stream . Abstract the input device into the source of data flow

  1. Data is abstracted into streaming (Stream) In the form of
  2. Need right memory space , Store the read data : The space of a variable Or the space of an array
  3. EOS : Indicates that the data has been read . VS No data has been read this time
  4. Can be InputStream Connect with other data processing objects

OutputStream Put the data in memory , By writing to the device of the data stream , Finally, write the data to the output device .

  1. When writing , To synchronize the write speed difference between memory and output device , Generally, there is a buffer (buffer) Of . Reduce the frequency of writing , Improve writing speed
  2. So scour the buffer (flush) Of Very important operation
  1. Character set (ASCII and Unicode) And character set encoding (ASCII、GBK、UTF-8)

1 Given path , Look in the file name A list of files containing the specified characters , And according to the user's choice , Decide whether to delete

Ideas :

  1. Start with the root of a tree , Traverse the whole tree
  2. Put the name of each node matching Search for conditions
  3. If you qualify , Just keep it File object
  4. After traversal , Get a group of qualified File object
  5. Ask the user once , The next step for these objects is to deal with objects
package com.djl.io;
/** *  Scan the specified directory , And find all ordinary files whose names contain the specified characters ( Does not contain a directory ), And then ask the user whether to  *  Delete the file  */

import java.io.File;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Test1 {
    
    public static void main(String[] args) throws Exception{
    
        Scanner sc = new Scanner(System.in);
        System.out.println(" Please enter the directory to scan :");
        String dir = sc.nextLine();
        File file = new File(dir);
        if(!file.isDirectory()){
    
            System.out.println(" The path to be scanned is not a directory or does not exist ");
            return;
        }
        System.out.println(" Please enter the characters to be included in the file name :");
        String fileName = sc.nextLine();
        Deque<File> list = new ArrayDeque<>();
        // This method will store the qualified file path to list in 
        findFile(file,fileName,list);
        while (!list.isEmpty()){
    
            File file1 = list.poll();
            System.out.println(" Whether or not to delete " + file1.getAbsolutePath() + " y/n");
            String pd = sc.nextLine();
            if(pd.toLowerCase().equals("y")){
    
                file1.delete();
                System.out.println(" Delete successful ");
            }
        }
    }

    private static void findFile(File file, String fileName, Deque<File> list) throws Exception{
    
        File[] files = file.listFiles();
        if(files == null || files.length == 0){
    
            return;
        }
        for(File f : files){
    
            if(f.isDirectory()){
    
                findFile(f,fileName,list);
            }else {
    
                String name = f.getName();
                if(name.contains(fileName)){
    
                    list.offer(f);
                }
            }
        }
    }
}

2 Copy of a file

Given two paths : Source file path ( There must be )、 The target path ( Must not exist && Directory exists )

Source file It must be an ordinary file , Not a directory file

Ideas :

  1. Because it's just copying , So we don't consider the content of the document at all
  2. So what we have to do is : Traverse ( Read data from the source file , Write target file ) Until all the data are written
package com.djl.io;


import java.io.*;
// Copy of documents 
public class Test2 {
    
    public static void main(String[] args) throws Exception{
    
        File oldFile = new File("D:/ resume /Java Resume of Development Engineer .docx");
        File newFile = new File("D:/ resume /2/ resume .docx");
        // Count the time required for replication 
        long sta = System.currentTimeMillis();
        // Prepared bucket 
        byte[] bur = new byte[1024];
        int count = 0;
        try (InputStream is = new FileInputStream(oldFile)){
    
            try(OutputStream os = new FileOutputStream(newFile)){
    
                while (true){
    
                    int n = is.read(bur);
                    count += n;
                    if(n == -1){
    
                        break;
                    }
                    os.write(bur);
                }
                os.flush();
            }
        }
        long end = System.currentTimeMillis();
        long ms = end-sta;
        double s = ms/1000.0;
        System.out.println(" Copy time is :"+s+"ms");

    }
}

3 Copy of a directory

Given two paths : Source file path ( There must be && Is a directory )、 The target path ( Must not exist && The parent directory does not exist )

Ideas :

if( Catalog ) : Continue to recursive + Create a directory relative to the target

if( file ): The relative position of the target , Copy files

package com.djl.io;

// Copy of directory 

import java.io.*;

public class Test2_copyDir {
    
    static File oldFile = new File("D:/ resume ");
    static File newFile = new File("D:/ resume /2");
    public static void main(String[] args) throws Exception{
    
        traversal(oldFile);
    }

    private static void traversal(File oldFile) throws Exception{
    
        File[] oldFiles = oldFile.listFiles();
        if(oldFiles == null){
    
            System.out.println(" The directory is empty ");
            return;
        }
        for(File file : oldFiles){
    
            String oldFilePath = oldFile.getCanonicalPath();
            String filePath = file.getCanonicalPath();
            String newFilePath = newFile.getCanonicalPath();

            String rever = filePath.substring(oldFilePath.length());
            newFilePath = newFilePath + rever;
            File oneNewFile = new File(newFilePath);
            if(file.isDirectory()){
    
                oneNewFile.mkdir();
                traversal(file);
            }else if(file.isFile()){
    
                copyFile(file,oneNewFile);
            }

        }
    }

    private static void copyFile(File file, File oneNewFile) throws Exception{
    
        try(InputStream is = new FileInputStream(file)){
    
            try(OutputStream os = new FileOutputStream(oneNewFile)){
    
                while (true){
    
                    byte[] bur = new byte[1024];
                    int n = is.read(bur);
                    if(n == -1){
    
                        break;
                    }
                    os.write(bur);
                }
                os.flush();
            }
        }
    }
}

If it helps you , Please give me a compliment .

原网站

版权声明
本文为[DJL_ new_ life]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060023118680.html