JAVA基础初探(十三)IO简介、字节流与字符流区别、带缓冲的字节/字符流读取数据、FileReader/FileWriter便捷类、Apache IO库使用说明
2018-02-05 20:51
1091 查看
该篇博客目录
1、JAVA IO简介2、字节流与字符流区别
3、使用带缓冲的字节流读取数据
4、使用带缓冲的字符流读取数据
5、读取字符的便捷类——FileReader、FileWriter
6、Apache IO库操作IO与文件
一、JAVA IO简介
IO可理解为In和Out,即输入和输出。所以IO体系的基本功能就是读和写IO流
作用:读写设备上的数据、硬盘文件、内存、键盘、网络等
根据数据的走向分为
输入流
输出流
根据处理的数据类型可分为
字节流
字符流
二、字节流与字符流区别
1、字节流
字节流可以处理所有类型的数据,如mp3、图片、文字、视频…在读取时,读到一个字节就返回一个字节JAVA中对应的类以Stream结尾
2、字符流
字符流仅能够处理纯文本数据,如txt文本等。在读取时,读到一个或者多个字节,先查找指定的编码表,然后将查到的字符返回JAVA中对应的类都以Reader或Writer结尾
继承自InputStream/OutputStream的流都是用于向程序中输入/输出数据,且数据的单位都是字节(byte=8bit)。
继承自Reader/Writer的流都是用于向程序中输入/输出数据,且数据的单位都是字符(2byte=16bit)。
三、使用带缓冲的字节流读取数据
拷贝文件Demo
package IOtest; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ReadByteStream { public static void main(String[] args) { // TODO Auto-generated method stub File f=new File("text.txt"); try { FileInputStream fis = new FileInputStream(f); BufferedInputStream bis=new BufferedInputStream(fis,1000);//缓冲区大小要大于数组的大小,因为数组是从缓存区读取,数组将缓冲区读取完毕后,缓冲区才会继续从文件中读取,这样可以进一步降低磁盘使用次数提高磁盘寿命 FileOutputStream fos=new FileOutputStream("newtext.txt"); BufferedOutputStream bos=new BufferedOutputStream(fos,1000); //字节数组内存大小在一定范围内加大(根据文件大小决定,大型文件加大,小型文件减小),相对的读写次数将会变少,且时间也会变少 byte input[]=new byte[100]; int count=0; System.out.println(System.currentTimeMillis()); while(bis.read(input)!=-1) { //System.out.println(new String(input)); bos.write(input); count++; } bis.close(); fis.close(); bos.close(); fos.close(); System.out.println("读取了"+count+"次"); System.out.println(System.currentTimeMillis()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
四、使用带缓冲的字符流读取数据
拷贝文件Demo
package IOtest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; public class ZiFuReadWrite { public static void main(String[] args) { // TODO Auto-generated method stub File f=new File("text.txt"); try { FileInputStream fis=new FileInputStream(f); InputStreamReader isr=new InputStreamReader(fis); BufferedReader br=new BufferedReader(isr); FileOutputStream fos=new FileOutputStream("newtext.txt"); OutputStreamWriter osw=new OutputStreamWriter(fos); //BufferedWriter bw=new BufferedWriter(osw);BufferedWriter不会自动换行,且没有自带flush,所以可以用PrintWriter PrintWriter pw=new PrintWriter(osw,true);//true代表自带flush String line; while((line=br.readLine())!=null) { //bw.write(line); pw.println(line); } //bw.flush(); br.close(); isr.close(); fis.close(); pw.close(); osw.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(); } } }
五、读取字符的便捷类——FileReader、FileWriter
拷贝文件Demo
package test2; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class test2 { public static void main(String[] args) { File f=new File("text.txt"); try { FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr); FileWriter fw=new FileWriter("newtext.txt"); BufferedWriter bw=new BufferedWriter(fw); String line; while((line=br.readLine())!=null) { bw.write(line); } br.close(); fr.close(); bw.close(); fw.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(); } } }
六、Apache IO库操作IO与文件
有了这些第三方库,操作变的方便的多,以后需要经常使用1、首先进入http://www.apache.org/
2、进入Commons
3、点击左侧Components
4、找到IO
5、点击左侧Download
6、下载IO库(我这里下载了可执行文件)
7、找到库中的commons-io-2.6.jar包(每个人可能版本不同)
8、放到java工程中(这是我的工程目录,自建了lib文件夹,其中放入jar包)
9、在eclipse中将jar包add Build Path
10、即可使用Apache IO库,其中有许多便捷工具包使用
11、Demo
package testApacheIO; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; public class test { public static void main(String[] args) { // TODO Auto-generated method stub File f=new File("text.txt"); File f2=new File("textnew.txt"); try { //在文件中读取其中字符串——readFileToString String input=FileUtils.readFileToString(f); System.out.println(input); //拷贝文件 FileUtils.copyFile(f, f2); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- java-I/O File类(5)-Reader和Writer、OutputStreamWriter 、BufferedWriter、字节流和字符流的区别
- java-I/O File类(5)-Reader和Writer、OutputStreamWriter 、BufferedWriter、字节流和字符流的区别
- 【Java.IO】I/O 字节 <-> 字符转换流 —— InputStreamReader,OutputStreamWriter(FileReader,FileWriter)
- JAVA基础再回首(二十一)——递归、IO流概述、字节流写数据、读取数据、复制数据、字节缓冲流
- java-I/O File类(5)-Reader和Writer、OutputStreamWriter 、BufferedWriter、字节流和字符流的区别
- 黑马程序员——Java基础知识——IO(字符流、字节流、转换流、File)
- Java的IO操作(五) - PrintStream类、字符流、Reader和Writer、带缓冲的字符流BufferedReader和BufferedWriter
- 黑马程序员---2015.6.25java基础笔记---装饰模式--字节流拷贝图片--字节流缓冲--字节字符转化--File类
- Java的IO操作(五) - PrintStream类、字符流、Reader和Writer、带缓冲的字符流BufferedReader和BufferedWriter .
- Java IO--字节-字符流转换OutputStreamWriter/InputStreamReader
- Java中IO字符流FileReader,FileWriter,缓冲流BufferedReader,BufferedWriter流,随机流
- java文件读取(按字符读+按字节读+缓冲读取)FileReader FileInputStream BufferedReader
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用
- Java的IO操作(五) - PrintStream类、字符流、Reader和Writer、带缓冲的字符流BufferedReader和BufferedWriter
- java20.IO操作------使用带有缓冲的字符流读写数据
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- java.io.BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
- 初学Java,IO之使用FileInputStream和FileReader读取文件(四十一)