Java文件操作

目录

文件读取

字节流读取

字符流读取

IO读取

文件写入

字符流写入

字节流写入


Java通过File类创建文件 但是在内存中创建,而不是磁盘中创建。

通过对File类对象操作,操作文件。

File file=new File("E:\\ade\\file.txt");//这里并不是真正创建文件 而是在JVM里创建一个文件
        File file1=new File("E:\\ade\\file1.txt");
        file.createNewFile();//这里是在磁盘创建文件
        file1.createNewFile();
        file.delete();//删除磁盘中的文件
        file1.delete();
  1. String getParent() 返回 File 对象的父目录文件路径
  2. String getName() 返回 FIle 对象的纯文件名称
  3. String getPath() 返回 File 对象的文件路径
  4. String getAbsolutePath() 返回 File 对象的绝对路径
  5. String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
  6. boolean exists() 判断 File 对象描述的文件是否真实存在
  7. boolean isDirectory() 判断 File 对象代表的文件是否是一个目录
  8. boolean isFile() 判断 File 对象代表的文件是否是一个普通文件
  9. boolean createNewFile() 根据 File 对象,自动创建一个空文件。成功创建后返回 true boolean delete() 根据 File 对象,删除该文件。成功删除后返回
  10. true void deleteOnExit() 根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行
  11. String[] list() 返回 File 对象代表的目录下的所有文件名
  12. File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象 表示
  13. boolean mkdir() 创建 File 对象代表的目录
  14. boolean mkdirs() 创建 File 对象代表的目录,如果必要,会创建中间目录
  15. boolean renameTo(File dest) 进行文件改名,也可以视为我们平时的剪切、粘贴操 作 boolean canRead() 判断用户是否对文件有可读权限
  16. boolean canWrite() 判断用户是否对文件有可写权限

文件读取

字节流读取

它主要用于字节流的操作,比如从文件中读取数据、网络数据接收等

        InputStream inputStream=null;
        try
        {
            inputStream=new FileInputStream("E:\\ade\\file.txt");

            //通过字节流只能读取到二进制  要通过string构造 
            //读取过程中如果出现错误,可能运行不到close 需要finally来关闭文件
            byte[] b=new byte[1024];
            int len=0;
            while(true){

                //讲字节读到b中和len
                len=inputStream.read(b);
                if(len==-1){//当返回值为-1时 文件读取结束
                    break;
                }
                System.out.println(b); //字节流 b内都是二进制
                //通过string 把二进制转成utf8
                String s=new String(b,0,len,"utf8");
                System.out.println(s);
            }

        }catch (IOException e)
        {
            e.printStackTrace();
        }finally {
            inputStream.close();
        }

字符流读取

它主要用于字符流的操作,比如文本文件的读取。

        Reader reader=null;
        //读取过程中可能发生异常  就执行不到close  所以要加try 来处理  finally无论如何都要关闭这个文件
        //凡事读取文件 都要加try
        try
        {
            reader=new FileReader("E:\\ade\\file.txt");
            char[] s=new char[1024];
            int len= reader.read(s);
            int i=0;
            for (int j = 0; j < len; j++) {
                System.out.println(s[j]);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            reader.close();
        }
        try{//当try中有资源创建时 在结束时会自动调用close  但类中有实现close方法
            Reader reader=new FileReader("E:\\ade\\file.txt");
            char[] s=new char[1024];
            int size=reader.read(s);
            for (int i = 0; i < size; i++) {
                System.out.print(s[i]);
                //println会自动加个换行
                //print不好
            }
        }catch (IOException e){
            e.printStackTrace();
        }

如果你需要处理文本文件,那么使用 Reader 会更加合适,因为它可以直接读取字符数据。而如果你需要处理二进制数据,比如图片、音频文件等,那么使用 InputStream 会更加合适。

try中有资源创建时,会在结束时自动调用closse 如析构函数一样  但类中需要有实现close的方法

IO读取

//这个更快捷 但只能读取一行
        InputStream inputStream=new FileInputStream("E:\\ade\\file.txt");
        Scanner scanner=new Scanner(inputStream);
        String s=scanner.next();

        System.out.println(s);

文件写入

字符流写入

它主要用于字节流的操作,比如文件输出、网络数据传输等。

        OutputStream outputStream=null;
        try{
            outputStream=new FileOutputStream("E:\\ade\\file1.txt");
            String s="Hello world";
            outputStream.write(s.getBytes());
        }catch (IOException e)
        {
            e.printStackTrace();
        }finally {
            outputStream.close();
        }

字节流写入

它主要用于字符流的操作,比如文本文件的写入

        Writer writer=null;
        try {
            writer=new FileWriter("E:\\ade\\file1.txt");
            writer.write("hello");
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            writer.close();
        }
PrintWriter 是 Writer 的一个扩展,它提供了格式化输出的功能,使得输出更加方便和灵活
        PrintWriter printWriter=null;
        try {
            printWriter=new PrintWriter("\\E:\\ade\\file1.txt");
            printWriter.println("hello world");//会把数据写入到缓冲区内
            printWriter.flush();//刷新缓冲区
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            printWriter.close();
        }

示例一:遍历文件 查找要删除的文件

public class file1 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入根目录");
        String path=scanner.next();
        System.out.println("输入文件名");
        String filename=scanner.next();

        File file=new File(path);
        ScamFile(file,filename);

    }
    public static void ScamFile(File f,String s)
    {
        File[] files=f.listFiles();//获取目录列表
        if(files==null)
        {
            System.out.println("该目录为空");
            return;
        }

        for(File file:files)
        {
            if(file.isDirectory()){
                ScamFile(file,s);//如果是目录递归 找新目录的列表
            }
            else {
                FileDelete(file,s);//如果是普通文件就查询是否是要删除的文件
            }
        }
    }

    public static void FileDelete(File f,String s)
    {
        Scanner scanner=new Scanner(System.in);
        if(f.getName().contains(s))
        {
            System.out.println("是否删除y/n");
            String yn=scanner.next();
            if(yn.equals("y")){
                f.delete();
                System.out.println("删除成功");
            }
        }
    }
}

示例二:复制一个文件

public class file2 {
    public static void main(String[] args) throws IOException {
        Scanner scanner =new Scanner(System.in);
        System.out.println("输入要复制的文件");
        String FilePath=scanner.next();
        //获取文件路径 并且在JVM中创建文件
            File file=new File(FilePath);


        //读取文件数据
        Reader reader=null;
        String data=new String("");
        try
        {
            reader=new FileReader(file);
            char[] c=new char[1024];
            int len=reader.read(c);
            for (int i = 0; i < len; i++) {
                data+=c[i];
                System.out.println(c[i]);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            reader.close();
        }

        //获取复制文件的路径和文件名
        System.out.println("请输入创建文件的目录\n请输入创建的文件名");
        String NewPath=scanner.next();
        String NewFile=scanner.next();
        String NewFileName=NewPath+'\\'+NewFile;//对文件格式进行清洗
        System.out.println(NewFileName);
        File file1=new File(NewFileName);
        file1.createNewFile();//在磁盘中创建文件

        //写入文件
        Writer writer=null;
        try {
            writer=new FileWriter(file1);
            writer.write(data);
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            writer.close();
        }
        System.out.println("复制成功!");
    }
}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值