JAVA基础——文件流的操作

==============================================================================================

递归----方法调用

File类的对象<----->本地硬盘文件
    查看属性
    创建新的文件  新的文件夹
    查看父元素目录  
    文件夹的遍历  删除
    
    file对象不能操作文件中的内容-------->通过流I/O的方式来完成
============================================================================================

    流按照方向(功能)来区分
        in(读取)    out(写入)
    操作的目标来区分
        文件流  数组流  字符串流  数据流  对象流  网络流。。。。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------

    学习文件流--->
        顾名思义  读取文件中的信息in   将信息写入文件中out
        文件流按照读取或写入的单位(字节数)大小来区分

        字节型文件流(1字节)
            FileInputStream/FileOutputStream
        字符型文件流(2字节--1字符)
                    FileReader/FileWriter
        
    容器
    1.变量    只能存一份
    2.数组    存储好多个    数据类型统一
    3.集合    存储好多个    存储后个数还能改变    泛型---数据类型统一
    如上三个都是Java中的类型(对象-->内存)
    都存储在内存中  程序执行完毕  虚拟机停止的时候  内存空间就回收啦
    数据都是临时性存储的
    ----------------------------
    4.文件    存储好多信息
    文件是存储在硬盘上的--->永久性保存
    数据虽然是安全了
    文件毕竟不在内存中  需要通过IO操作文件        JDBC


    字节型文件输入流
        FileInputStream
        1.包   java.io
        2.了解一下继承关系    InputStream类  字节型输入流的父类
        3.创建对象
            调用一个带File类型的构造方法
            调用一个带String类型的构造方法
        4.常用方法
            int code = read();    每次从流管道中读取一个字节   返回字节的code码
            *int count = read(byte[] )  每次从流管道中读取若干个字节  存入数组内  返回有效元素个数
            int count = available();   返回流管道中还有多少缓存的字节数
            skip(long n)   跳过几个字节  读取
                多线程--->利用几个线程同时读取文件
                10000字节    5个小人同时读取
                1-2000   2001-4000   4001-6000   6001-8000   8001-10000
                D当做服务器    E当做客户端
            *close()    将流管道关闭---必须要做  最好放在finally里  注意代码的健壮性  判断严谨
    字节型文件输出流
        FileOutputStream    将数据写入文件中
        1. java.io
        2.继承OutputStream  所有字节型输出流的父类
        3.创建对象
            调用一个带File参数   还有File boolean重载
            调用一个带String参数   还有String boolean重载
        4.常用方法
            write(int code);  将给定code对应的字符写入文件   '='
            write(byte[])    将数组中的全部字节写入文件   getByte()
            flush();    将管道内的字节推入(刷新)文件
            close();    注意在finally中关闭

    小任务
    1.设计一个方法  文件的复制
        C://test//aaa.txt------->  D://某一个位置
        找到C盘中的源文件   内容读一遍
        去D盘中创建一个新文件  将内容写进去
    2.扩展设计一个方法  文件的加密/解密
        读取内容
        中间做一个小算法(加密)   可逆的
        写进去
    *3.扩展设计一个方法  文件夹的复制
        配合着递归
        配合着流

==============================================================================================

package CopyFiles;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class copyFile {
    public void copyfile(File filename,String Path){
        String oldFilePath = filename.getAbsolutePath();
        String newFilePath = Path+oldFilePath.split(":")[1];
        File newFile = new File(newFilePath);
        File[] files = filename.listFiles();
        if(files!=null){
            newFile.mkdir();
            if(files.length!=0){
                for(File f:files){
                    copyfile(f,Path);
                }
            }
        }else{
            FileInputStream fileInputStream = null;
            FileOutputStream fileOutputStream = null;
            try{
                fileInputStream = new FileInputStream(filename);
                fileOutputStream = new FileOutputStream(newFile);
                int index = fileInputStream.read();
                while(index!=-1){
                    fileOutputStream.write(index);
                    fileOutputStream.flush();
                    index = fileInputStream.read();
                }
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                try{
                    fileInputStream.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
                try{
                    fileOutputStream.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }

        }

    }
    public void Deletefile(File filename){
        File[] files = filename.listFiles();
        if(files!=null&&files.length!=0){
            for(File f:files){
                Deletefile(f);
                f.delete();
            }
        }
        else{
            filename.delete();
        }
    }
    public static void main(String[] args) {
        copyFile copy = new copyFile();
        File file = new File("D:\\text");
        copy.Deletefile(file);
      //copy.copyfile(new File("C:\\Dev-Cpp"),"D:");

    }
}

==============================================================================================

    字符型文件流
        FileReader    FileWriter
        只能操作纯文本文件(文件右键打开方式 记事本打开 能看懂)
        .txt 

        FileReader
        1.java.io包
        2.继承  InputStreamReader    Reader
        3.构造方法
        4.常用
            read()
            read(char[])
        FileWriter
        1.java.io包
        2.继承 OutputStreamWriter  Writer
        3.构造方法
            带file参数   带file,boolean参数
            带String参数  带String,boolean参数
        4.常用
            write(int)
            write(char[])
            write(string)
            flush    close


        FileInputStream/FileOutputStream
        FileReader/FileWriter
        read    write

================================================================================================

        件夹的删除与遍历

package newtestfile;

import java.io.File;

public class NewTestFile {

    //设计一个方法  用来展示(遍历)文件夹
    //  参数-->file(代表文件或文件夹)
    public void showFile(File file){//D://test文件夹
        //判断如果file是一个文件夹 文件夹内有元素 找一个人先做
        //获取file的子元素  files==null是个文件 files!=null是个文件夹 files.length!=0是一个带元素的文件夹
        File[] files = file.listFiles();//test文件夹所有子元素
        if(files!=null && files.length!=0){
            for(File f:files){//每一个子元素都找人遍历
                this.showFile(f);//循环第一次 test文件夹中的aaa 循环第二次 test->bbb 循环第三次 Test.txt
            }
        }
        //做自己的显示(file是文件或file是一个空的文件夹)
        System.out.println(file.getAbsolutePath());
    }

    //设计一个方法 删除文件夹
    //  参数 file
    public void deleteFile(File file){
        //判断file不是空文件夹 找人先做事
        File[] files = file.listFiles();
        if(files!=null && files.length!=0){
            for(File f:files){
                this.deleteFile(f);
            }
        }
        //删除file (file是个文件或file是一个空文件夹)
        file.delete();
    }

    public static void main(String[] args){
        NewTestFile ntf = new NewTestFile();
        File file = new File("D://test");
        ntf.deleteFile(file);
        //ntf.showFile(file);
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值