1、文件的复制(速度快)2、向文件中写出字符串3、从文件中读取字符串:4、实现简易记事本工具:5、文件输出流的追加写模式:6、缓冲流(BufferedOutputStream):
——————————————————————————————————————
——————————————————————————————————————
0、节点流(字节流和字符流)
①字节流:字节
②字符流:
①简单点:字节->解码->字符。 ②复杂点:若干字节->选择某种解码方式->解码->索引字符集->映射到一个字符。
————————————————
字符流的概念,它是按虚拟机的编码来处理,也就是要进行字符集的转化,这两个之间通过InputStreamReader,OutputStreamWriter(转换流)来关联,实际上是通过 byte[]和 String来关联的。
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关闭) } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)