ooday06 2022.01.28 API第六天:

ooday06 2022.01.28 API第六天:,第1张

ooday06 2022.01.28 API第六天:

1、文件的复制(速度快)2、向文件中写出字符串3、从文件中读取字符串:4、实现简易记事本工具:5、文件输出流的追加写模式:6、缓冲流(BufferedOutputStream):
——————————————————————————————————————
——————————————————————————————————————

0、节点流(字节流和字符流)
①字节流:字节
②字符流:

①简单点:字节->解码->字符。
②复杂点:若干字节->选择某种解码方式->解码->索引字符集->映射到一个字符。

————————————————
字符流的概念,它是按虚拟机的编码来处理,也就是要进行字符集的转化,这两个之间通过InputStreamReader,OutputStreamWriter(转换流)来关联,实际上是通过 byte[]和 String来关联的。

1、文件的复制02(速度快)
package Vdayio;
import java.io.*;

public class VIdayCopyDemo02 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("9.ppt");
        FileOutputStream fos = new FileOutputStream("9_cp2.ppt");
        
        //定义一个可以存储10240字节的数组,相当于缓存:
        byte[] data = new byte[1024*10];//10kb
        //得到实际读取到的字节数:
        int len;
        //该方法的作用是返回当前的计算机时间:
        long start = System.currentTimeMillis();
        while ((len = fis.read(data))!= -1) {  //read(要传参):用块读  ;若写成=-1,则会产生几十个G的垃圾文件
            //fos.write(data);//复制的文件会产生多余的垃圾数据
            fos.write(data,0,len);//不会产生垃圾数据  ,将文件上的字节读取到内存data中
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完毕!耗时:" + (end - start) + "ma");
        fis.close();
        fos.close();//流在使用完毕后要调用close关闭
    }
}

2、向文件中写出字符串:

--------------------FileOutputStream fos = new FileOutputStream(“demo.txt”);

package Vdayio;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class WriteStringDemo {
    public static void main(String[] args) throws IOException {
        //向文件demo.txt中写入文本数据:
        FileOutputStream fos = new FileOutputStream("demo.txt");
        String line = "beep,beep,i'm sheep~beep,beep,i'm sheep~";//line:行
        byte[] data = line.getBytes(StandardCharsets.UTF_8);//用UTF-8把字符串转化为字节存在byte[]数组里
        

        fos.write(data);//写出要存的数据
        //将最上面三句话精简:(用UTF-8把字符串转化为字节存在byte[]数组里)
        fos.write("比,bi,爱慕希~比,比,爱慕希".getBytes(StandardCharsets.UTF_8));

        System.out.println("写出完毕!");//此时会在默认路径项目名下的文件夹里创建"demo.txt"文件并写入语句。
        fos.close();//流在使用完毕后要调用close关闭
    }
}
3、从文件中读取字符串:
package Vdayio;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class VIdayReadStringDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("demo.txt");//向文件demo.txt中写入文本数据

        //利用available表示文件的长度。注:该方法实际是预估目前能通过输入流读取到多少
        //字节,不能记为流只能读取到这么多就再也读不到数据了!:
        byte[] data = new byte[fis.available()];//创建一个byte[]数组用来装demo.txt的数据

        //一次性读取文件中的所有字节到数组中(原因是字节数组长度与文件长度正好一致)
        fis.read(data);//读数据

        //把所有的数据用UTF-8把字符串转换为字节存储在定义的str里:
        //String的构造方法支持将给定的字节数组按照指定的字符集还原为字符串:
        String str = new String(data, StandardCharsets.UTF_8);
        System.out.println(str);

        fis.close();//流在使用完毕后要调用close关闭
    }
}
4、实现简易记事本工具:
package Vdayio;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class VIdayTest2 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);//创建扫描仪,用来获取用户输入
        System.out.println("请开始输入内容,单独输入exit退出");
        FileOutputStream fos = new FileOutputStream("note.txt");//向文件note.txt中写入文本数据
        

        

        //如下和上面(1)相同:
        String line;//定义一个字符串line
        while(!"exit".equals(line = scanner.nextLine())){
            fos.write(line.getBytes(StandardCharsets.UTF_8));//用UTF-8把字符串转化为字节存在byte[]数组里
        }
        fos.close();//流在使用完毕后要调用close关闭
    }
}
5、文件输出流的追加写模式:

//不加true----下面的字符串则会把之前的覆盖
//加上true----会在之前字符串的基础追加下面输入的字符串

package Vdayio;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class VIdayFosDemo {
    public static void main(String[] args) throws IOException {
        

        //加上true----会在之前字符串的基础追加下面输入的字符串:
        //不加true----下面的字符串则会把之前的覆盖:
        FileOutputStream fos = new FileOutputStream("fos.txt",true);
        String line = "你叉叉,穷哈哈~哈利波特骑着扫帚飞,sorry~";
        fos.write(line.getBytes(StandardCharsets.UTF_8));//用UTF-8把字符串转化为字节存在byte[]数组里

        System.out.println("输出完毕!");
        fos.close();//流在使用完毕后要调用close关闭
    }
}
6、缓冲流(BufferedOutputStream):

是一种高级流,作用是加快读写效率更高

package Vdayio;
import java.io.*;

public class VIdayCopyDemo03 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("9.ppt");//向文件9.ppt中写入文本数据
        BufferedInputStream bis = new BufferedInputStream(fis);//创建缓冲输入流的同时连在fis上

        FileOutputStream fos = new FileOutputStream("9_cp.ppt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);//创建缓冲输入流的同时连在fos上

        int d;
        long start = System.currentTimeMillis();
        while((d = bis.read())!=-1){ //使用缓冲流读取字节 //有了缓冲流,就不需要用fis输出流了
            bos.write(d);//使用缓冲流写出字节
        }
        long end = System.currentTimeMillis();//到结束使用了多长时间
        System.out.println("耗时:"+(end-start)+"ms");
        bis.close();//关闭流时只需要关闭高级流即可,他会自动关闭他连接的流
        bos.close();//(流在使用完毕后要调用close关闭)
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存