javaSE(14)(字节流与字符流)
来源:互联网 发布:加拿大留学移民 知乎 编辑:程序博客网 时间:2024/05/22 12:29
字节输入流:package zz.itheima.byte_char_stream;import java.io.FileInputStream;public class TestFileInputStream { //测试字节输入流(读文件) public static void main(String[] args) { /*演示FileInputStream public FileInputStream(File file) public FileInputStream(String name) public int read() public int read(byte[] b) new String(byte[] b) public void close()*/ try { FileInputStream fis = new FileInputStream("demo.txt");//没有的话会自动创建 /* int val = fis.read();//读文件。一次读取一个字节(8位) System.out.println((char)val);*/ //一次读取一个字节太慢,来个循环 /* int val; while ((val=fis.read())!=-1) {//把读的结果赋值给val,并且如果返回-1说明读取完毕了,如果不是-1说明还有内容 System.out.println((char)val); }*/ //一次读取太慢。来个循环 /* while (true) { int val = fis.read(); if (val==-1) { break; }else { System.out.println((char)val); } }*/ System.out.println("**********************"); //一次读取太慢,来一辆车一次拉好多货 byte[] temp = new byte[1024]; fis.read(temp); System.out.println(new String(temp).trim()); } catch (Exception e) { e.printStackTrace(); } }}字节输出流:package zz.itheima.byte_char_stream;import java.io.FileOutputStream;public class TestFileOutputStream { //测试文件输出流(写文件) public static void main(String[] args) { /*演示FileOutputStream类 public FileOutputStream(File file) public FileOutputStream(File file,boolean append) public FileOutputStream(String name) public FileOutputStream(String name,boolean append) public void write(int b) 参数是ASCII表中的码值,不是普通数字 public void write(byte[] b) String对象的getBytes方法 public void write(byte[] b, int off, int len) public void flush() ???不做任何操作 字节流不用缓冲区,二进制数据会直接写入到硬盘中 public void close()*/ FileOutputStream fos = null; try { fos = new FileOutputStream("demo.txt"); //fos.write(97);//参数是ASCII表中的码值,不是普通数字,一次写一个字节,比较慢 byte[] val = {97,98,13,99,'v'};//13是换行 fos.write(val); byte[] hello = {'h','e','l','l','o'}; fos.write(hello); String s = "你好!"; fos.write(s.getBytes());//字符串转换为字节数组 } catch (Exception e) { e.printStackTrace(); } }}字符输入(读文件)流:package zz.itheima.byte_char_stream;import java.io.File;import java.io.FileReader;public class TestFileReader { //测试文件(字符)输入流 public static void main(String[] args) { /*FileReader类的常用方法: public FileReader(File file) public FileReader(String fileName) public int read() public int read(char[] cbuf) public void close()*/ try { //架管道 File f = new File("demo.txt"); FileReader fr = new FileReader(f); /*int res = fr.read();还是一次读取一个字符 System.out.println((char)res);*/ /* //来辆车 char[] temp = new char[(int)f.length()];//一次装的大小刚好为文件大小 fr.read(temp); System.out.println(new String(temp));*/ //对于较大文件循环多次读取 char[] temp = new char[1024]; while (true) { int res = fr.read(temp); if (res==-1) { break; } System.out.println(new String(temp)); } } catch (Exception e) { e.printStackTrace(); } }}字符输出(写文件)流:package zz.itheima.byte_char_stream;import java.io.FileWriter;import java.io.IOException;public class TestFileWrite { public static void main(String[] args) { // 演示FileWriter类/* public FileWriter(File file) public FileWriter(String fileName) public FileWriter(File file,boolean append) public FileWriter(String fileName,boolean append) public void write(String str) public void write(char[] cbuf) public void write(char[] b,int off, int len) public void flush() public void close()*/ try { FileWriter fw=new FileWriter("demo.txt"); fw.write("wor\nld"); char[] temp={'h','e','l','l','o'}; fw.write(temp); fw.close(); } catch (IOException e) { e.printStackTrace(); } }}字符流的缓冲区:package zz.itheima.byte_char_stream;import java.io.FileWriter;public class TestHuanChong { public static void main(String[] args) { // 演示字符流的缓冲区 //默认缓冲区大小8K,超过就自动写;没超过就需要调用flush()或close()才会写 try { FileWriter fw = new FileWriter("demo.txt"); for (int i = 0; i < 1024; i++) { fw.write("a"); //fw.flush(); } } catch (Exception e) { e.printStackTrace(); } }}字节数组大小:package zz.itheima.byte_char_stream;import java.io.File;import java.io.FileInputStream;public class TestByteArrayLength { public static void main(String[] args) { // 演示读取字节时,数组的大小 //对于较小文件可以是文件大小,然后一次性读取;对于较大文件可以循环多次读取 /* try { File f = new File("demo.txt"); FileInputStream fis = new FileInputStream(f); byte[] temp = new byte[(int)f.length()]; fis.read(temp); System.out.println(new String(temp)); } catch (Exception e) { e.printStackTrace(); }*/ //1。家管道 try { File f = new File("demo.txt"); FileInputStream fis = new FileInputStream(f); //来辆车 byte[] temp = new byte[(char)f.length()]; fis.read(temp); //把字节转换成字符 String val = new String(temp); System.out.println(val); } catch (Exception e) { e.printStackTrace(); } }}每次读取内容多少不同的效率:package zz.itheima.byte_char_stream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class TestEfficiency { // 每次一个数组 public static void copy1() { long begin=System.currentTimeMillis(); try { File f=new File("E:\\Oracle的钢铁侠植入广告.mov"); FileInputStream fis=new FileInputStream(f); FileOutputStream fos=new FileOutputStream("d:\\1.mov"); byte[] temp=new byte[1024*100]; //一次拉100k while(true) { //装车 int res=fis.read(temp); if(res==-1) break; //卸车 fos.write(temp,0,res); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } long end=System.currentTimeMillis(); System.out.println(end-begin); } //每次一个字节 public static void copy2() { long begin=System.currentTimeMillis(); try { File f=new File("E:\\Oracle的钢铁侠植入广告.mov"); FileInputStream fis=new FileInputStream(f); FileOutputStream fos=new FileOutputStream("d:\\1.mov"); while(true) { //装车 int res=fis.read(); if(res==-1) break; //卸车 fos.write(res); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } long end=System.currentTimeMillis(); System.out.println(end-begin); } public static void main(String[] args) { /*复制一个Mp4 两种方式(1.每次一个字节 2.每次一个数组)的效率测试*/ copy2(); }}复制文件:package zz.itheima.byte_char_stream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class CopyFile { /*复制一个图片 对于较小文件可以一次性读,然后一次性写*/ public static void copy1() { try { // 1.读取源路径文件的数据 //架管道 File f=new File("E:\\1.jpg"); FileInputStream fis=new FileInputStream(f); //来辆车 byte[] temp=new byte[(int)f.length()]; //装货 fis.read(temp); // 2.把数据写入到目标路径的文件中 //架管道 FileOutputStream fos=new FileOutputStream("d:\\1.jpg"); //写 fos.write(temp); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /*复制一个图片 对于较大文件可以边读边写*/ public static void copy2() { try { File f=new File("E:\\1.jpg"); FileInputStream fis=new FileInputStream(f); FileOutputStream fos=new FileOutputStream("d:\\1.jpg"); byte[] temp=new byte[1024*10]; //一次拉10k while(true) { //装车 int res=fis.read(temp); if(res==-1) break; System.out.println(res); //卸车 fos.write(temp,0,res); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { copy1(); }}复制字符串文件:package zz.itheima.byte_char_stream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyStringFile { // 复制 // 1.从源路径读取数据 // 2.把数据写入到目标路径 // 对于较小文件可以一次性读,然后一次性写 public static void copy1() { // 架管道 FileReader fr = null; // 架管道 FileWriter fw = null; try { File f = new File("E:\\1.jpg"); fr = new FileReader(f); // 来辆车 char[] temp = new char[(int) f.length()]; // 装车 fr.read(temp); fw = new FileWriter("e:\\1.jpg"); // 卸货 fw.write(temp); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fr.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } } // 对于较大文件可以边读边写 public static void copy2(){ // 架管道 FileReader fr = null; // 架管道 FileWriter fw = null; try { File f = new File("demo.txt"); fr = new FileReader(f); fw = new FileWriter("e:\\2.txt"); char[] temp = new char[1024]; while (true) { int res=fr.read(temp); if(res==-1) break; else { fw.write(temp,0,res); } } } catch (IOException e) { e.printStackTrace(); } finally { try { fr.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { }}例子一:package zz.itheima.byte_char_stream;import java.io.FileOutputStream;import java.util.Scanner;public class Demo1 { // 练习:用户在控制台多次录入学生姓名,直到录入quit退出,然后把这些姓名换行写到一个文本文件中 public static void method1() throws Exception{ Scanner sc = new Scanner(System.in); FileOutputStream fos = new FileOutputStream("E:\\demo.txt"); String flag ; do { System.out.println("请输入学生姓名:"); String name = sc.nextLine(); fos.write(name.getBytes()); fos.write(13); fos.write(10); System.out.println("是否继续(y/n)"); flag = sc.nextLine(); } while (flag.equalsIgnoreCase("y")); fos.close(); } public static void method2() throws Exception { // 练习:用户在控制台多次录入学生姓名,直到录入quit退出,然后把这些姓名换行写到一个文本文件中 Scanner sc = new Scanner(System.in); FileOutputStream fos = new FileOutputStream("e:\\demo.txt"); String flag; String all=""; do { System.out.println("请输入学生姓名:"); String name = sc.nextLine(); all=all+name+"\r\n"; //记事本对于回车换行的解析跟其他编辑器不同 System.out.println("是否继续(y/n)"); flag = sc.nextLine(); } while (flag.equalsIgnoreCase("y")); System.out.println(all); fos.write(all.getBytes()); fos.close(); } public static void main(String[] args)throws Exception { //method1(); method2(); }}例子二:package zz.itheima.byte_char_stream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;public class Demo2 { //一次性读写 public static void copy1(){ FileInputStream fis = null; FileOutputStream fos = null; try { File f = new File("E:\\1.jpg"); fis = new FileInputStream(f); byte[] temp = new byte[(int)f.length()]; fis.read(temp); fos = new FileOutputStream("E:\\2.jpg"); fos.write(temp); } catch (Exception e) { e.printStackTrace(); } finally{ try { fis.close(); fos.close(); } catch (Exception e2) { e2.printStackTrace(); } } } //多次分段读写 public static void copy2(){ FileInputStream fis = null; FileOutputStream fos = null; try { File f = new File("E:\\1.jpg"); fis = new FileInputStream(f); fos = new FileOutputStream("E:\\3.jpg"); byte[] temp = new byte[10]; while (true) { int res = fis.read(temp); if (res==-1) { break; }else { fos.write(temp, 0, res); } } } catch (Exception e) { e.printStackTrace(); } finally{ try { fis.close(); fos.close(); } catch (Exception e2) { e2.printStackTrace(); } } } public static void main(String[] args) { //copy1(); copy2(); }}例子三:package zz.itheima.byte_char_stream;import java.io.FileWriter;import java.io.IOException;import java.util.Scanner;public class Demo3 { public static void main(String[] args) { // 练习:用户在控制台多次录入学生姓名,每3个写入到一个文本文件中 FileWriter fw = null; try { fw = new FileWriter("demo.txt"); } catch (IOException e1) { e1.printStackTrace(); } Scanner sc = new Scanner(System.in); int n = 1; String name = ""; try { do { System.out.println("请输入第" + n + "个学生的姓名:"); name = sc.nextLine(); fw.write(name + "\n"); if (n % 3==0) { fw.flush(); } n++; } while (!name.equalsIgnoreCase("quit")); } catch (IOException e) { e.printStackTrace(); } finally{ try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } }}
0 0
- javaSE(14)(字节流与字符流)
- JavaSE---IO流(字节流、转换流、字符流)
- JavaSE IO流(2) 字节流
- JavaSe基础(27)-- 字节流
- JAVASE基础-day20(IO(字节流))
- (笔记)字节流与字符流
- 字符流与字节流(IO)
- JavaSE中字节流与字符流在复制文件上的异同
- Java基础学习总结(14)---File类、字节流与字符流、字节字符转换流
- JavaSE 学习参考:字节流和字符流转换
- JavaSe基础(28)-- 字符流
- 字节与字符,字节流与字符流
- 字节流与字符流、字节与字符 --个人理解
- 字符流与字节流的区别(转载)
- 字节流与字符流的区别(good!)
- java 字节流与字符流的区别(缓冲区)
- Java基础知识学习六(字节流与字符流)
- (转) java 字节流与字符流的区别
- C++之引用揭秘
- 第十三周项目2 Dijkstra算法的验证
- 第十二周项目4——利用遍历思想求解图问题(4)-输出一些简单回路
- iOS 开发,工程中混合使用 ARC 和非ARC
- 【C/C++学院】0830-兰不达表达式/STL算法-操作数据
- javaSE(14)(字节流与字符流)
- Javascript中 a.href 和 a.getAttribute('href') 结果不完全一致
- Android兼容性问题 -- SparseArray.clone()方法异常
- 第14周上机实践项目2 - 二叉树排序树中查找的路径
- 【详解】从b站抓取信息并存入数据库
- ThreadLocal
- 第十一周项目1 算法验证3中序线索化二叉树的算法验证
- mysql prompt的用法详解
- 冒泡排序-指针交换