IO流2

常用的文件操作:

目录的操作和文件删除:

mkdir创建一级目录:D:\demo

mkdirs创建多级目录:D:\demo\a\b\c

delete删除空目录或文件

    public class Directory{
        public static void main(String[] args) {
            //判断 d:\\news1.txt是否存在,如果存在就删除
            public void m1(){
                String filePath = "d:\\news1.txt";
                File file = new File(filePath);
                if (file.exists()) {
                    if (file.delete()) {
                        System.out.print("删除成功!!");
                    }
                }
                else{
                    System.out.print("该文件不存在~~");
                }
            }

            //判断 D:\\demo02是否存在,存在就删除,否则提示不存在
            //在Java编程中,目录也被当成文件
            public void m2(){
                String filePath = "D:\\demo02";
                File file = new File(filePath);
                if (file.exists()) {
                    if (file.delete()) {
                        System.out.print("删除成功!!");
                    }
                }
                else{
                    System.out.print("该目录不存在~~");
                }
            }
            //判断 D:\\demo\\a\\b\\c 目录是否存在,如果存在就提示已经存在,否则就创建
            public void m3(){
                String directoryPath = "D:\\demo\\a\\b\\c";
                File file = new File(directoryPath);
                if (file.exists()) {
                    System.out.print("该目录已存在~~");
                }else{
                    if(file.mkdirs()){
                        System.out.print(directoryPath + "创建成功");
                    }else{
                        System.out.print("创建失败~~");
                    }
                }
            }
        }
    }   

IO流原理及流的分类:

JavaIO流原理:
  1. I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输。如读/写文件,网络通讯等
  2. Java程序中,对于数据的输入/输出操作以”流(stream)”的方式进行
  3. java.io包下提供了各种”流”类和接口,用以获取不同种类的数据,并通过方法输入或输出数据
  4. 输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(中)
  5. 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中
流的分类:

按操作数据单位不同分为:字节流(8bit)对二进制文件友好,字符流(按字符)对文本文件友好

按操作流的流向不同分为:输入流,输出流

按流的角色的不同分为:节点流,处理流/包装流

(抽象基类) 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
  1. Java的IO流共涉及40多个类,实际上非常规则,都是从如上4个抽象基类派生的
  2. 由这4个类派生出来的子类名称都是以其父名作为子类名后缀

InputStream:字节输入流

InputStream抽象类是所有类字节输入流的超类

InputStream常用的子类:
  1. FileInputStream:文件输入流
  2. BufferedInputStream:缓冲字节输入流
  3. ObjectInputStream:对象字节输入流
例1

使用FileInputStream读取hello.txt文件,并将文件内容显示到控制台

read()方法单个字节读取,效率较低

    public void readFile01(){
        int readData = 0;
        String filePath = "e:\\hello.txt";
        FileInputStream fileInputStream = null;
        //read()方法单个字节读取,效率较低
        try{
            //创建FileInputStream对象,用于读取文件
            fileInputStream = new FileInputStream(filePath);
            //从该输入流读取一个字节的数据。如果没有输入可用,此方法将阻止
            //如果返回-1,表示读取完毕
            while((readData = fileInputStream.read()) != -1){
                System.out.print((char)readData);   //转成char显示
                //如果有汉字,会出现乱码
            }
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try{
                fileInputStream.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

使用read(byte[] b)方法读取文件,提高效率

    public void readFile02(){
        //字节数组
        byte[] buf = new byte[8];//一次读取8个字节
        int readLen = 0;
        String filePath = "e:\\hello.txt";
        FileInputStream fileInputStream = null;
        //read()方法单个字节读取,效率较低
        try{
            //创建FileInputStream对象,用于读取文件
            fileInputStream = new FileInputStream(filePath);
            //从该输入流读取最多b.length字节的数据。此方法将阻塞,直到某些输入可用
            //如果返回-1,表示读取完毕
            //如果读取正常,返回实际读取的字节数
            while((readLen = fileInputStream.read(buf)) != -1){
                System.out.print(new String(buf,0,readLen));    //转成char显示
                //如果有汉字,会出现乱码
            }
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try{
                fileInputStream.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
例2

使用FileOutputStream将数据写到文件中,如果该文件不存在,则创建该文件

    public void writerFile(){
        //创建FileOutputStream对象
        String filePath = "e:\\a.txt";
        FileOutputStream fileOutputStream = null;

        try{

            /*
                1、new FileOutputStream(filePath)创建方式,当写入内容时,会覆盖原来的内容
                2、new FileOutputStream(filePath,true)创建方式,当写入内容时,是追加到文件后面
            */

            //得到FileOutputStream对象
            fileOutputStream = new FileOutputStream(filePath);
            //写入一个字节
            fileOutputStream.writer("H");
            //写入字符串
            String str = "hello,world!"
            //str.getBytes() 可以把 字符串->字节数组
            fileOutputStream.writer(str.getBytes());
            //或者witle(byte[] b,int off, int len)
        }catch(IOException e){
            e.printStackTrace
        }finally{
            try{
                fileInputStream.close();
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
完成文件拷贝:将e:\Koala.jpg 拷贝到c:\
    /*
        1、创建文件的输入流,将文件读入到程序
        2、创建文件的输出流,将读取到的文件数据,写入到指定的文件
    */

    String srcFilePath = "e\\Koala.jpg"
    String destFilePath = "e\\Koala2.jpg"

    FileInputStream fileInputStream = null;
    FileOutputStream fileOutputStream = null;

    //try-catch
    fileInputStream = new FileInputStream(srcFilePath);
    fileOutputStream = new FileOutputStream(destFilePath);
    //定义一个字节数组,提高读取效果
    byte[] buf = new byte[1024];
    int readLen = 0;
    while ((readLen = fileInputStream.read(buf)) != -1 ) {
        //读取到后,就写入到文件,通过fileOutputStream
        //即是一边读一边写
        fileOutputStream.writer(buf,0,readLen);
    }
    System.out.print("拷贝成功~~");
    //try-catch
    finally{
        //try-catch
        //关闭输入流和输出流
        if(fileInputStream != null){
            fileInputStream.close();
        }
        if (fileOutputStream != null) {
            fileOutputStream.close();
        }
        //try-catch

    }

FileReader 和 FileWriter:

FileReader 和 FileWriter 是字符流,即按照字符来操作IO

FileReader相关方法:
  1. new FileReader(File/String)
  2. read:每次读单个字符,返回该字符,如果到文件末尾返回-1
  3. read(char[]):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1
相关API:
  1. new String(char[]):将char[]转换成String
  2. new String(char[],off,len):将char[]的指定部分转换成String
FileWriter常用方法:
  1. new FileWriter(File/String):覆盖模式,相当于流的指针在首段
  2. new FileWriter(File/String,true):追加模式,相当于流的指针在尾端
  3. write(int):写入单个字符
  4. write(char[]):写入指定数组
  5. write(char[],off,len):写入指定数组的指定部分
  6. write(string):写入整个字符串
  7. write(string,off,len):写入字符串的指定部分
相关API:

String类:toCharArray:将String转换成char[]

例1使用FileReader从story.txt读取内容,并显示

按单个字符读取文件

    String filePath = "e:\\stroy.txt";
    FileReader fileReader = null;
    char data = 0;
    //1、创建FileReader对象

    //try-carch
    fileReader = new FileReader(filePath);
    //循环读取 使用read方法,单个字符读取
    while ((data = fileReader.read()) != -1) {
        System.out.print(char() data);
    }
    //try-catch
    finally{
        //try-catch
        if (fileReader != null) {
            fileReader.close();
        }
        //try-catch
    }

使用字符数组读取文件

    String filePath = "e:\\stroy.txt";
    FileReader fileReader = null;
    int readLen = 0;
    char[] buf = new char[8]; 
    //1、创建FileReader对象

    //try-carch
    fileReader = new FileReader(filePath);
    //循环读取 使用read(buf)方法,返回的是实际读取到的字符数
    //如果返回-1,说明到文件结束
    while ((readLen = fileReader.read(buf)) != -1) {
        System.out.print(new String(buf), 0, readLen);
    }
    //try-catch
    finally{
        //try-catch
        if (fileReader != null) {
            fileReader.close();
        }
        //try-catch
    }
例2使用FileWriter将”风雨之后,定见彩虹”写入到note.txt文件中
    public static void main(String[] args) {
        String filePath = "e:\\note.txt";
        //创建FileWriter对象
        FileWriter fileWriter = null;
        char[] chars = {'a','b','c'};

        //try-catch
        fileWriter = new FileWriter(filePath);

        /*      
            write(int):写入单个字符
            write(char[]):写入指定数组
            write(char[],off,len):写入指定数组的指定部分
            write(string):写入整个字符串
            write(string,off,len):写入字符串的指定部分
        */
        //write(int):写入单个字符
        fileWriter.write("H");

        //write(char[]):写入指定数组
        fileWriter.write(chars);

        //write(char[],off,len):写入指定数组的指定部分
        fileWriter.write("ABCDEF".toCharArray(), 0, 3);

        //write(string):写入整个字符串
        fileWriter.write(" 你好北京~~");

        //write(string,off,len):写入字符串的指定部分
        fileWriter.write("上海天津", 0, 2); //写入 上海 ,天津没写进去

        fileWriter.write("风雨之后,定见彩虹");

        //在数据量大的情况下,可以使用循环操作

        //try-catch
        finally{
            //对于FileWriter,一定要关闭流,或者flush才能真正的把数据写入到文件  
            //try-catch
            //fileWriter.flush();
            //关闭文件流,等价于flush() + 关闭
            fileWriter.close();
            //try-catch
        }
        System.out.print("程序结束~~");
    }
创作不易!转载请注明作者及文章链接或作者博客链接——
- 作者:pidanxia
- 链接:https://pidanxia.ink
(链接可为:**文章链接**或者**作者博客链接**)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇