黑马程序员——java--IO
来源:互联网 发布:linux日志设置 编辑:程序博客网 时间:2024/06/05 10:06
——- android培训、java培训、期待与您交流! ———-
IO流:
如何对文件进行读写?IO(Input/Output):输入/输出 流:Stream自来水厂 家里 水流 管道Java中的文件流分为“输入流”和“输出流”,简称IO流,是对文件输入(写)输出(读)的抽象。Java.io包提供了很多接口和类支持对各种文件的读写,负责架个管道并把数据扔到管道中或从管道中得到数据
字节流和字符流:
字节流,一次读写一个字节(8位),适用于图片、音视频等文件,也包括文本文件(注意编码要跟操作系统编码保持一致)字符流,一次读写两个字节(16位),适用于文本文件、Word文件等unicode字符字节流的抽象基类:InputStream和OutputStream字符流的抽象基类:Reader和Writer字节流的抽象基类:InputStream和OutputStream 常用子类:FileInputStream和FileOutputStream字符流的抽象基类:Reader和Writer 常用子类:FileReader和FileWriter
字节输出流:
把二进制数据写到“输出流”中FileOutputStream类的常用方法:public FileOutputStream(File file) 文件不存在会自动创建public FileOutputStream(String name) 文件不存在会自动创建public FileOutputStream(File file,boolean append)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 close() 关闭流,释放资源
字节输入流:
从“输入流”中读取二进制数据FileInputStream类常用方法:public FileInputStream(File file) 文件不存在不会自动创建public FileInputStream(String path)public int read()public int read(byte[] b) new String(byte[] b)public void close()
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class Test05 { /** * @param args */ public static void main(String[] args) { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("ang.gif"); fos = new FileOutputStream("ang_new02.gif"); byte ch[] = new byte[1024]; int len =0; while ((len=fis.read(ch))!=-1) { fos.write(ch,0,len); } } catch (Exception e) { throw new RuntimeException("运行异常"); }finally{ if (fis!=null) { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (fos!=null) { try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }}
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class Test06Copy { /** * @param args */ public static void main(String[] args) { BufferedOutputStream bos = null; BufferedInputStream bis = null; try { bis = new BufferedInputStream(new FileInputStream("ang.gif")); bos = new BufferedOutputStream(new FileOutputStream("anf02.gif")); int len = 0; try { while ((len=bis.read())!=-1) { bos.write(len); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if (bis!=null) { try { bis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (bos!=null) { try { bos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }}
字符输出流:
把字符数据写到“输出流”中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()
字符输入流:
从“输入流”中读取字符数据FileReader类的常用方法:public FileReader(File file)文件不存在不会自动创建public FileReader(String path)public int read()public int read(char[] cbuf)public void close()
字符流缓冲区:
缓冲区就是内存中的一块儿区域,读写时可以先把数据放到此处,满了之后才进行真正的读写,避免了频繁读写硬盘,提高效率。字符流默认缓冲区大小是8K当使用输出流写入数据时,数据默认会先积攒到缓冲区,满了之后自动写入硬盘;没满就需要人工调用flush()或close()才会写入硬盘当使用输入流读取数据时,数据默认会尽量先读取到缓冲区,满了之后才再次从硬盘上进行读取,否则直接从缓冲区取数据
注意细节:
文件读写 不是文件夹读写IO操作必须进行异常处理和资源释放,资源释放应当放到finally代码块中try-catch最好放到最外层尽量不使用每次读写一个数据的方法read() write(int c)注意两个read方法返回值的不同int read()int read(byte[] b)或read(char[] c)
import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test03 { public static void main(String[] args) { copy01(); } public static void copy01(){ FileReader fr = null; FileWriter fw = null; try { fr = new FileReader("test.txt"); fw= new FileWriter("test01.txt"); char[] array = new char[1024]; int len = 0; while ((len=fr.read(array))!=-1) { fw.write(array, 0, len); } } catch (FileNotFoundException e) { System.out.println("454665"); e.printStackTrace(); } catch (IOException e) { System.out.println("454665"); e.printStackTrace(); }finally{ try { if (fw!=null) { fw.close(); } } catch (IOException e) { System.out.println("454665"); e.printStackTrace(); } try { if (fr!=null) { fr.close(); } } catch (IOException e) { System.out.println("454665"); e.printStackTrace(); } } }}
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test08 { /** * @param args */ public static void main(String[] args) { BufferedReader br = null; BufferedWriter bw = null; try { br = new BufferedReader(new FileReader("test01.txt")); bw = new BufferedWriter(new FileWriter("test03.txt")); String line = null; while((line= br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
java.io.BufferedOutputStream 字节缓冲流(写)public BufferedOutputStream(OutputStream out) 默认大小是8kpublic BufferedOutputStream(OutputStream out, int size)可以自己指定缓冲区大小,单位字节public void write(int b) 参数是ASCII表中的码值,不是普通数字public void write(byte[] b)public void write(byte[] b,int index,int length)public void flush() public void close() java.io.BufferedInputStream 字节缓冲流(读)public BufferedInputStream(InputStream in) 默认缓冲区是8kpublic BufferedInputStream(InputStream out, int size)可以自己指定缓冲区大小,单位字节public int read()public int read(byte[] b)public void close()java.io.BufferedWriter 字符缓冲流(写)public BufferedWriter(Writer out) 默认大小是8kpublic BufferedWriter(Writer out, int sz)可以自己指定缓冲区大小,单位字节public void write(char[] cbuf)public void write(char[] cbuf,int index,int len)public void write(String str)public void newLine() 独有方法,优势是跨平台public void flush() public void close()java.io.BufferedReader 字符缓冲流(读)public BufferedReader(Reader in) 默认大小是8kpublic BufferedReader(Reader in, int sz)可以自己指定缓冲区大小,单位字节public int read()public int read(char[] cbuf)public String readLine() 独有方法 碰到换行或回车即一行结束public void close()
package com.lsj.test;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class Copy { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("ang.gif"); FileOutputStream fos = new FileOutputStream("ang_new.gif"); byte in[] = new byte[50]; while (fis.read(in) != -1) { fos.write(in); } fis.close(); fos.close(); System.out.println("done"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
package com.lsj.test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class test { public static void main(String[] args) { File file = new File("tes.txt"); try { FileInputStream fis = new FileInputStream(file); byte input[] = new byte[6]; fis.read(input); String inputString = new String(input, "UTF-8"); System.out.println(inputString); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
——- android培训、java培训、期待与您交流! ———-
0 0
- 黑马程序员——Java IO概述
- 黑马程序员——Java IO
- 黑马程序员——Java IO
- 黑马程序员——JAVA(IO 2)
- 黑马程序员——java IO
- 黑马程序员——java IO流
- 黑马程序员—java—IO流
- 黑马程序员——Java IO流
- 黑马程序员——Java IO流
- 黑马程序员——Java基础---IO
- 黑马程序员——java---IO
- 黑马程序员——java---IO总结
- 黑马程序员——java-IO流
- 黑马程序员——java基础--IO
- 黑马程序员——java---IO(一)
- 黑马程序员——java---IO(一)
- 黑马程序员——java---IO
- 黑马程序员——JAVA-IO
- Objective-C内存管理第一弹:引用计数
- 变量定义概念汇总
- PHP语言开发Paypal支付demo的具体实现
- linux安装JDK
- VS2013 产品密钥 – 所有版本
- 黑马程序员——java--IO
- OCP知识点讲解 之 检查点队列与增量检查点
- 神经网络-overfitting(二)
- leetcode:26 Remove Duplicates from Sorted Array-每日编程第二十三题
- 【项目基础】容器、AOP理论篇
- linux关闭执行程序
- [hdoj试题]Climbing Worm
- openSUSE下安装MySQL
- 小米手机无法连接eclipse调试解决方案