Java文件操作专题

前言

在我心目中,能在操作系统中存储文件,读取文件一直是一个神秘的领域,能用编程完成文件的增删改查是我之前学编程时的动力之一,之前的C语言最多只会写入txt文档,并且读出来还非常费劲,Python因为各种包的存在,保存文件以及读取文件变得非常轻松,但是操作文件又是另一回事了,对于包不支持的文件类型就毫无办法(只是我不知道而已),现在来到了Java,这次在拉钩大数据课程的辅助下,我准备整理出文件操作的方法,以及配合多线程和网络编程,完成一些之前看来是不可能的任务。

正文

首先所有文件都可以用字节进行传输

但是读取字符的时候需要使用字符流(也可以把字节流转为字符流然后进行读取)
在这里插入图片描述

在这里插入图片描述
下图是所有的IO流结构
在这里插入图片描述

在这里插入图片描述

代码实际操作目录

接下来以几个小例子充分理解IO流的内容

1.txt文件输入,控制台字符输出

2.控制台字符输入,txt文件输出

3.任意文件输入,任意文件输出(复制操作)

4.遍历文件夹下所有文件并复制

5.保存类文件并读取

6.在网络程序中实现文件传输

代码实际操作

1.txt文件输入,控制台字符输出

package com.csdn.IO;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Work2 {
    public static void main(String[] args) {

        FileReader fr =null;
        BufferedReader br = null;

        try {
            fr = new FileReader("d:/a.txt");
            br=new BufferedReader(fr);
            String str=null;
            while ((str=br.readLine())!=null)
            {
                System.out.println(str);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(br!=null) {
                    br.close();
                }
                if(null!=fr) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }


    }
}


package com.csdn.IO;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Work1 {
    public static void main(String[] args) {
        FileWriter fw= null;
        BufferedWriter br = null;
        try {
            fw = null;
            br = null;
			//FileWriter是基础的文件写入类,可以理解为最底层搬砖的
			//苦活累活都是他干,而且还特别蠢,需要很多额外操作来确保工作尽如人意
			
            fw=new FileWriter("d:/a.txt");
            //BufferedWriter是较为高层的操作流,对输入的民工流(FileWriter)进行操作
            //并且提高民工流的可用性和效率

            br= new BufferedWriter(fw);

            char[] a = new char[]{'韩','b','c','d'};
            br.write(a,0,4);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(null!=br)
                {
                br.close();

                }
                if(null!=fw) {
                    fw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

在这里插入图片描述

对文件进行写入操作时可以选择是否覆盖之前的内容,只需要在append参数这里选择true或者不填默认false

package com.csdn.IO;

import java.io.*;

public class Work3 {
    public static void main(String[] args) {
        FileInputStream fis=null;
        BufferedInputStream bis=null;
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        try {
            fos = new FileOutputStream("d:/target.mkv");
            bos = new BufferedOutputStream(fos);


            fis= new FileInputStream("D:/美剧/末日孤舰 第1季/1.mkv");
            bis= new BufferedInputStream(fis);

            int len = 0;
            byte[] temp= new byte[1024];
            while((len=bis.read(temp))!=-1 )
            {
                bos.write(temp,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                bos.close();
                fos.close();
                bis.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

package com.csdn.IO;

import java.io.*;


public class Work4 {
    public static void show(File[] files)
    {
        BufferedInputStream bis = null;
        BufferedOutputStream bof =null;
        for(File f :files)
        {
            if(f.isDirectory())
            {
                System.out.println("目录:" + f.getName());
                Work4.show(f.listFiles());
            }
            else if(f.isFile())
            {
                try {
                    bis=new BufferedInputStream(new FileInputStream(f.getAbsoluteFile()));
                    bof=new BufferedOutputStream(new FileOutputStream("d:/test/"+f.getName()));
                    System.out.println("d:/test/"+f.getName());
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        bof.close();
                        bis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    public static void main(String[] args) {

        File a = new File("C:/Users/Administrator/Desktop/模块四 Java核心类库(下)/模块四 Java核心类库(下)/02任务二 IO流");
        File[] files = a.listFiles();
        Work4.show(files);

    }
}

一点小理解

在这里插入图片描述

在数据流中,其实包括几个方面:
1.A->B,如果是B是文件字节,就用FileOutputtStream,如果是文件字符,就用FileWrite
2.A->B,如果A是非java内部的数据类型,就用BufferedOutputStream,如果A是java内部的数据类型,比如基本数据类型或者定义的类,那么就用Data

在这里插入图片描述
文件传输流并不关心你要传的具体数据,只是关心你要 传的数据类型与文件的位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值