基本文件读写 - Android

本篇文章记录的是Java应用中的基本文件读写.

文件

1.创建文件

文件的创建,需要借助java.io.File实例上的createNewFile方法.该方法返回一个boolean值.true代表创建成功,false代表创建失败

package files;
import java.io.File;
import java.io.IOException;
public class CreateFile {
    private final static String FILE_NAME = "yuansudong.txt";
    public static void run() {
        final File file = new File(CreateFile.FILE_NAME);
        if (file.exists()) {
            // 如果文件存在,会进入这里.
            System.out.println(CreateFile.FILE_NAME + "存在,不执行创建操作");
            return;
        }
        try {
            boolean lIsSuccess =  file.createNewFile();
            if(!lIsSuccess) {
                System.out.println("创建文件失败");
                return;
            }
            System.out.println("创建文件成功+"+file.getAbsolutePath());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

2.删除文件

package files;
import java.io.File;
public class DeleteFile {
    private  final  static  String FILE_NAME = "yuansudong.txt";
    public  static  void run() {
        File file =  new File(FILE_NAME);
        if(!file.exists()) {
            System.out.println("文件不存在,不执行删除操作");
            return;
        }
       boolean lIsSuccess =  file.delete();
        if(!lIsSuccess) {
            System.out.println("文件删除失败");
            return;
        }
        System.out.println("文件删除成功");
    }
}

3.重命名

package files;
import java.io.File;
import java.io.IOException;
public class RenameFile {
    private final static String SRC_FILE_NAME = "yuansudong.txt";
    private final  static String DST_FILE_NAME = "yuansudong_rename.txt";
    public  static void run() {
        File lSrcFile =  new File(SRC_FILE_NAME);
        File lDstFile =  new File(DST_FILE_NAME);
        if(!lSrcFile.exists()) {
            try {
                if( !lSrcFile.createNewFile()) {
                    System.out.println("源文件创建失败");
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        if(!lSrcFile.renameTo(lDstFile)){
            System.out.println("文件重命名失败");
        };
    }
}

4.读写数据

package files;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
public class RWFile {
    private static final String FILE_NAME="yuansudong.txt";
    public static void run() throws IOException {
        File file = new File(FILE_NAME);
        if(!file.exists()) {
            try {
                if(!file.createNewFile()) {
                    System.out.println("文件创建失败");
                    return;
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        try (FileOutputStream writer =  new FileOutputStream(file)) {
            String hello = "hello,world";
            writer.write(hello.getBytes(StandardCharsets.UTF_8));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        try (FileInputStream reader = new FileInputStream(file)) {
            int fileSize = reader.available();
            byte[] buffer = new byte[fileSize];
            int length = reader.read(buffer);
            if (length != fileSize) {
                throw new RuntimeException("长度不等");
            }
            System.out.println("当前获取到的内容是:" + new String(buffer,StandardCharsets.UTF_8));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

文件夹

1.创建文件夹

package directory;

import java.io.File;

import strings.Strings;

public class CreateDirectory {
    private static final String DIR = Strings.Join("yuansudong", File.separator, "sub1", File.separator, "sub2");

    public static void run() {
        File file = new File(DIR);
        if (file.exists()) {
            // 进入这里代表文件存在.
            if (file.isFile()) {
                System.out.println("该路径是一个文件,不能进行创建文件");
                return;
            }
            System.out.println("该文件夹已经存在");
            return;
        }
        // mkdir -p
        if (!file.mkdirs()) {
            System.out.println("文件夹创建失败");
            return;
        }
        System.out.println("文件夹创建成功");
    }
}

3.删除文件夹

delete方法,目录必须为空.

package directory;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import strings.Strings;
public class DeleteDirectory {
    private final static String mDIR = "yuansudong";
    public static long run(String directory) {
        if (directory == null) {
            directory = mDIR;
        }
        File file = new File(directory);
        if (!file.exists()) {
            System.out.println("该文件夹不存在,不能执行删除操作");
            return 0;
        }
        // 用于获取绝对路径
        directory = file.getAbsolutePath();
        String[] fileList = file.list();
        if (fileList == null) {
            // 进入这里代表抽象路径不存在.在该段代码中,不会走到这里.因为,前面已经检查过了.
            return 0;
        }
        final AtomicLong totalCount = new AtomicLong();
        String finalDirectory = directory;
        List<String> firstResult = Arrays.stream(fileList).peek((s) -> {
            File normalFile = new File(Strings.Join(finalDirectory, File.separator, s));
            if (normalFile.isDirectory()) {
                totalCount.addAndGet(DeleteDirectory.run(normalFile.getAbsolutePath()));
                return;
            }
            final boolean lDeleteSuccess = normalFile.delete();
            if (lDeleteSuccess) {
                totalCount.addAndGet(1);
                System.out.println("文件删除成功 => " + normalFile.getAbsolutePath());
            }
        }).map((e) -> e + e).toList();
        if (file.delete()) {
            totalCount.addAndGet(1);
            System.out.println("目录删除成功");
        }
        return totalCount.get();
    }
}