java --字节流 和 字符流的相关使用方法
2017-05-20 17:29
330 查看
//字节流: INputStream/OutputStream //字符流: Reader/Writer static String path = "路径"; public static void main(String[] args) throws IOException { // demo1(); // demo2(); // demo3(); // demo4(); // demo5(); // demo6(); // demo7(); // demo8(); // demo9(); // demo10(); // demo11(); // demo12(); // demo13(); // demo14(); demo15(); } /******************************* * 字节流 ******************************/ //读 public static void demo1() throws IOException { //对文件操作的类 //参数是文件的路径 File file = new File("路径/xxx.txt"); //选择输入的字节流进行操作 FileInputStream fileInputStream = new FileInputStream(file); //读内容 int x 4000 = fileInputStream.read(); System.out.println(x); int y = fileInputStream.read(); System.out.println(y); int z = fileInputStream.read(); System.out.println(z); int t = fileInputStream.read(); System.out.println(t); //关闭流 fileInputStream.close(); } public static void demo2() throws IOException { //对文件操作的类 //参数是文件的路径 File file = new File("路径/xxx.txt"); //选择输入的字节流进行操作 FileInputStream fileInputStream = new FileInputStream(file); //读内容 int x = 0; while ((x = fileInputStream.read()) != -1) { System.out.println(x); } fileInputStream.close(); } //写 public static void demo3() throws IOException { File file = new File("路径/yyy.txt"); //若有文件,就覆盖内容 //若没有文件,新建文件夹并写入 // FileOutputStream fileOutputStream = new FileOutputStream(file); //若要追加内容,需要使用重载方法,第二个参数true FileOutputStream fileOutputStream = new FileOutputStream(file, true); fileOutputStream.write(100); fileOutputStream.write(101); fileOutputStream.write(102); fileOutputStream.close(); } //图片拷贝 public static void demo4() throws IOException { FileInputStream fileInputStream = new FileInputStream(path + "1.jpg"); FileOutputStream fileOutputStream = new FileOutputStream(path + "copy_1.jpg"); int b = 0; while ((b = fileInputStream.read()) != 0) { fileOutputStream.write(b); } fileInputStream.close(); fileOutputStream.close(); } //MP3拷贝 public static void demo5() throws IOException { FileInputStream fileInputStream = new FileInputStream(path + "whzg.mp3"); FileOutputStream fileOutputStream = new FileOutputStream(path + "copy_whzg.mp3"); int b = 0; while ((b = fileInputStream.read()) != 0) { fileOutputStream.write(b); } fileInputStream.close(); fileOutputStream.close(); } //大数组的方式拷贝 //弊端 - 被拷贝文件太大的时候,会造成内存溢出 public static void demo6() throws IOException { FileInputStream fileInputStream = new FileInputStream(path + "whzg.mp3"); FileOutputStream fileOutputStream = new FileOutputStream(path + "new_whzg.mp3"); //File类中 - file.length()获取文件的长度 //fileInputStream.available();不阻塞情况下,可读取的最大长度 int len = fileInputStream.available(); System.out.println(len); //缓存区 - 鸡蛋蓝 byte[] arr = new byte[len]; //将文件内容读到一个arr中 fileInputStream.read(arr); //将arr中的内容写入到文件夹中 fileOutputStream.write(arr); fileInputStream.close(); fileOutputStream.close(); } //小数组的拷贝方式 //注意: 小心缓存数组中存储着上一次读取的部分内容 public static void demo7() throws IOException { FileInputStream fileInputStream = new FileInputStream(path + "xxx.txt"); FileOutputStream fileOutputStream = new FileOutputStream(path + "zzz.txt"); //缓存区 - 鸡蛋蓝 byte[] arr = new byte[1024 * 8]; // //将文件内容读到一个arr中 // fileInputStream.read(arr); // // for (int i = 0; i < arr.length; i++) { // System.out.println(arr[i]); // } // // fileInputStream.read(arr); // for (int i = 0; i < arr.length; i++) { // System.out.println(arr[i]); // } int len1 = 0; //read (arr) -> 将内容读到数组中 //返回值 : 当有内容读时,返回每次实际读取到的字节数 // 当无内容课读时,返回-1 while ((len1 = fileInputStream.read(arr)) != -1) { //将arr中的内容写入到文件中 // fileOutputStream.write(arr); //将参数1中的内容写入到文件中 //从数组的第参数2个的位置开始,写入参数3的长度 fileOutputStream.write(arr, 0, len1); } //将arr中的内容写入到文件夹中 // fileOutputStream.write(arr); fileInputStream.close(); fileOutputStream.close(); } //系统自带的缓冲 public static void demo8() throws IOException { FileInputStream fileInputStream = new FileInputStream(path + "xxx.txt"); FileOutputStream fileOutputStream = new FileOutputStream(path + "zzz.txt"); //将fileInputStream包装一下,使其带有缓存区 BufferedInputStream bis = new BufferedInputStream(fileInputStream); //将fileOutputStream包装一下,使其带有缓存区 BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); int b = 0; while ((b = bis.read()) != 0) { bos.write(b); } //flush 刷新 //close刷新并关闭流 //将缓存区的内容刷新进文件 // bos.flush(); // bos.write(100); // bos.flush(); //注意:不需要再关闭fileInputStream和fileOutputStream //因为bis和bos 就是对其进行了包装 bis.close(); bos.close(); } //字节流读取中文字符 public static void demo9() throws IOException { FileInputStream fileInputStream = new FileInputStream(path + "xxx.txt"); //一个中文字符由2/3/n个字节组成 //因此写个缓存,一次读出对应的字节数 byte[] arr = new byte[3]; int b = 0; while ((b = fileInputStream.read(arr)) != -1) { //将字节还原成中文字符,再输出 System.out.print(new String(arr, 0, b)); } fileInputStream.close(); } //字节流写中文字符 public static void demo10() throws IOException { FileOutputStream fos = new FileOutputStream(path + "yyy.txt"); //写入内容 fos.write("你好,你好!!!".getBytes()); //写入换行 fos.write("\r\n".getBytes()); fos.close(); } /******************************************** c309 * 字符流 *************************************/ //读 public static void demo11() throws IOException { File flie = new File(path + "xxx.txt"); FileReader fr = new FileReader(flie); int c = 0; while ((c = fr.read()) != -1) { System.out.print((char) c); } fr.close(); } //写 public static void demo12() throws IOException { File flie = new File(path + "xxx.txt"); FileWriter fw = new FileWriter(flie); fw.write("大家好!!"); fw.write(97); fw.close(); } //字符流不能拷贝非纯文本的文件,因为会将不识别的字符读成?再写到新文本中 //拷贝 //也不推荐使用字符流拷贝纯文本文件,因为读和写都需要多一步转码的过程 //只有直接读出字符内容的文档或者单纯写入时才推荐使用字符流 public static void demo13() throws IOException { FileReader fr = new FileReader(path + "xxx.txt"); FileWriter fw = new FileWriter(path + "ccc.txt"); int c = 0; while ((c = fr.read()) != -1) { fw.write(c); } fr.close(); //注意:Writer类中有一个2k的小缓冲区,若不关流 // 会将内容写到缓冲区,关闭流后才刷新到硬盘上 fw.close(); } //自带缓冲区的拷贝 public static void demo14() throws IOException { FileReader fr = new FileReader(path + "xxx.txt"); FileWriter fw = new FileWriter(path + "ccc.txt"); //将fr 和 br 包装到缓冲区 BufferedReader br = new BufferedReader(fr); BufferedWriter bw = new BufferedWriter(fw); int c = 0; while ((c = br.read()) != -1) { bw.write(c); //"\r\n"与newLine都是换行的作用 //newLine的兼容性更高,可跨平台 bw.newLine(); } br.close(); bw.close(); } //readline() - 按行读 public static void demo15() throws IOException { FileReader fr = new FileReader(path + "xxx.txt"); BufferedReader br = new BufferedReader(fr); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); }
相关文章推荐
- java 的反射机制相关方法的使用
- 从零开始学java之IO流 使用字节流好还是字符流好?
- java中在使用字节流和字符流不关闭流引起的情况分析?
- 有关于java文件的相关方法的使用的理解。
- Java——I/O,字节流与字符流,BufferedOutputStream,InputStream等(附相关练习代码)
- Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
- java:常用字符ASCII码与相关方法
- JAVA基础再回首(二十二)——转换流概述及用法、简化写法FileWriter和 FileReader、字符缓冲流及特殊用法、字节流字符流复制文件方法总结
- java中Graphics相关类的使用方法
- Java文件(io)编程_文件字节流的使用方法
- Java基础小知识1——分别使用字节流和字符流复制文件
- 【Java编程】String相关方法的使用(一)
- java笔记之使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件2种方法
- 在java中关于使用scanner接受char类型字符的方法
- java字符串相关常见使用
- IO流之字符流和字节流的使用_Java编程
- Java字节流和字符流的区别 (方法区别 操作基本单元区别 操作方式区别 处理数据类型区别) 之个人总结
- 20170824 Java——I/O,字节流与字符流,BufferedOutputStream,InputStream等(附相关练习代码)
- Java使用字节流复制文件的方法
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作