Java基础--IO流

来源:互联网 发布:ubuntu 文件夹root权限 编辑:程序博客网 时间:2024/06/05 06:55

IO流的分类

根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流
字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
输入流和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。
             字节流               字符流输入流        InputStream             Reader输出流        OutputStream            Writer

JAVA字节流

FileInputStream和FileOutputStream这两个类属于结点流,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。如: FileInputStream infile = new FileInputStream("myfile.dat");FileOutputStream outfile = new FileOutputStream("results.dat");要注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。BufferedInputStream和BufferedOutputStream它们是过滤器流,其作用是提高输入输出的效率。DataInputStream和DataOutputStream这两个类创建的对象分别被称为数据输入流和数据输出流。这是很有用的两个流,它们允许程序按与机器无关的风格读写Java数据。所以比较适合于网络上的数据传输。这两个流也是过滤器流,常以其它流如InputStream或OutputStream作为它们的输入或输出。
Java的字符流

字符流主要是用来处理字符的。Java采用16位的Unicode来表示字符串和字符,对应的字符流按输入和输出分别称为readers和writers。InputStreamReader和OutputStreamWriter在构造这两个类对应的流时,它们会自动进行转换,将平台缺省的编码集编码的字节转换为Unicode字符。对英语环境,其缺省的编码集一般为ISO8859-1。BufferedReader和BufferedWriter这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理。对BufferedReader类,该类的readLine()方法能一次从流中读入一行,但对于BufferedWriter类,就没有一次写一行的方法,所以若要向流中一次写一行,可用PrintWriter类将原来的流改造成新的打印流,PrintWriter类有一个方法println(),能一次输出一行。

代码1--ReaderFileUtil

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.OutputStreamWriter;import java.io.PrintWriter;public class ReaderFileUtil {//以字节的方式读取文件中public static String readFileBytes(String fileName){//获取当前的文件File file  = new File(fileName);//获取当前文件的所在的目录,如果目录不存在,就采用自动创建目录的方式 File rootPath = file.getParentFile();if(!rootPath.exists())rootPath.mkdirs();try (//建立输出流FileInputStream in = new FileInputStream(fileName);){byte[] b = new byte[1024];int len = 0;StringBuilder builder  = new StringBuilder();while((len=in.read(b))!=-1){builder.append(new String(b, 0, len));}return builder.toString();} catch (Exception e) {e.printStackTrace();return null;}}//以字符的方式进行 读取public static String readFileChars(String fileName){//获取当前的文件File file  = new File(fileName);//获取当前文件的所在的目录,如果目录不存在,就采用自动创建目录的方式 File rootPath = file.getParentFile();if(!rootPath.exists())rootPath.mkdirs();try (FileReader reader = new FileReader(fileName);){char[] b = new char[64];int len = 0;StringBuilder builder  = new StringBuilder();while((len=reader.read(b))!=-1){builder.append(new String(b, 0, len));}return builder.toString();} catch (Exception e) {e.printStackTrace();return null;}}//以行读取public static String readFileLine(String fileName){//获取当前的文件File file  = new File(fileName);//获取当前文件的所在的目录,如果目录不存在,就采用自动创建目录的方式 File rootPath = file.getParentFile();if(!rootPath.exists())rootPath.mkdirs();try (//建立输出流FileReader fileReader = new FileReader(fileName);BufferedReader reader = new BufferedReader(fileReader);){String line = null;StringBuilder builder  = new StringBuilder();while((line = reader.readLine())!=null){builder.append(line+"\r\n");}return builder.toString();} catch (Exception e) {e.printStackTrace();return null;}}public static void main(String[] args) {String file = "c://test/a.txt";//String result1 = readFileBytes(file);//System.out.println("*********************************");//System.out.println(result1);//String result2 = readFileChars(file);//System.out.println("*********************************");//System.out.println(result2);String result3 = readFileLine(file);System.out.println("*********************************");System.out.println(result3);}}
代码2--WriterFileUtil

import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.OutputStreamWriter;import java.io.PrintWriter;public class WriterFileUtil {//以字节的方式写入文件中public static void wirterFileBytes(String content,String fileName,boolean append){//获取当前的文件File file  = new File(fileName);//获取当前文件的所在的目录,如果目录不存在,就采用自动创建目录的方式 File rootPath = file.getParentFile();if(!rootPath.exists())rootPath.mkdirs();try (//建立输出流FileOutputStream out = new FileOutputStream(fileName,append);){byte[] b = content.getBytes();out.write(b);} catch (Exception e) {}}//以字符的方式进行 写入public static void wirterFileChars(String content,String fileName,boolean append){//获取当前的文件File file  = new File(fileName);//获取当前文件的所在的目录,如果目录不存在,就采用自动创建目录的方式 File rootPath = file.getParentFile();if(!rootPath.exists())rootPath.mkdirs();try (//建立输出流//FileOutputStream out = new FileOutputStream(fileName,append);//OutputStreamWriter writer = new OutputStreamWriter(out);FileWriter writer = new FileWriter(fileName,append);){writer.write(content);} catch (Exception e) {e.printStackTrace();}}//以行写入public static void wirterFileLine(String content,String fileName,boolean append){//获取当前的文件File file  = new File(fileName);//获取当前文件的所在的目录,如果目录不存在,就采用自动创建目录的方式 File rootPath = file.getParentFile();if(!rootPath.exists())rootPath.mkdirs();try (//建立输出流FileOutputStream out = new FileOutputStream(fileName,append);OutputStreamWriter outwriter = new OutputStreamWriter(out);BufferedWriter writer = new BufferedWriter(outwriter);){writer.write(content);writer.newLine();} catch (Exception e) {e.printStackTrace();}}public static void wirterFileLines(String content,String fileName,boolean append){//获取当前的文件File file  = new File(fileName);//获取当前文件的所在的目录,如果目录不存在,就采用自动创建目录的方式 File rootPath = file.getParentFile();if(!rootPath.exists())rootPath.mkdirs();try (//建立输出流PrintWriter writer = new PrintWriter(new FileOutputStream(file, append));){writer.println(content);writer.flush();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {String file = "c://test/a.txt";//wirterFileBytes("I",file,true);//wirterFileChars("\tLove ",file,true);//wirterFileLine("<span style="font-family: Arial, Helvetica, sans-serif;">白日依山尽,\r\n黄河入海流。\r\n欲穷千里目,\r\n更上一层楼。</span>",file,true);wirterFileLines("白日依山尽,\r\n黄河入海流。\r\n欲穷千里目,\r\n更上一层楼。",file,false);}}

代码3--测试

package com.fileiodemo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class IODemo {public static void main(String[] args) throws IOException {File file = new File("E:/app/test/a.txt");FileInputStream fileInputStream = new FileInputStream(file);InputStreamReader inReader = new InputStreamReader(fileInputStream, "UTF-8");int len = 0;//a.txt为UTF-8格式,读出来为乱码//byte[] b = new byte[1024];//while ((len = fileInputStream.read(b)) != -1) {//System.out.println(new String(b));//}//正确字符char[] c = new char[128];while ((len = inReader.read(c)) != -1) {System.out.println(new String(c,0,len));}System.out.println("----------------InputStreamReader--------------------");File file2 = new File("E:/app/test/ab.txt");if (!file2.exists()) {System.out.println("文件不存在!");}try {//字节流--文本文件FileInputStream in = new FileInputStream(file2);//建立输入流--转换流 -字节流---转换成--字符流InputStreamReader isr = new InputStreamReader(in, "UTF-8");char[] c2 = new char[128];int len2 = 0;while ((len2=isr.read(c2)) != -1) {System.out.println(new String(c2,0,len2));}} catch (Exception e) {e.printStackTrace();} System.out.println("----------------BufferedReader--------------------");File file3 = new File("E:/app/test/abc.txt");//字节流--文本文件FileInputStream in3 = new FileInputStream(file3);//建立输入流--转换流 -字节流---转换成--字符流InputStreamReader isr3 = new InputStreamReader(in3, "UTF-8");//缓存流--数据数据缓冲的作用,高效运行--可以一行读取BufferedReader reader = new BufferedReader(isr3);String line = null;while ((line = reader.readLine()) != null) {if (!line.equalsIgnoreCase("")) {System.out.println(line);}}System.out.println("----------------输出流--另存为--------------------");File file4 = new File("E:/app/test/abcd.txt");File fileout = new File("E:/app/test/abcd1.txt");//字节流--文本文件FileInputStream in4 = new FileInputStream(file4);//建立输入流--转换流 -字节流---转换成--字符流InputStreamReader isr4 = new InputStreamReader(in4, "UTF-8");//缓存流--数据数据缓冲的作用,高效运行--可以一行读取BufferedReader reader4 = new BufferedReader(isr4);FileOutputStream out4 = new FileOutputStream(fileout);OutputStreamWriter osw = new OutputStreamWriter(out4, "GBK");BufferedWriter writer = new BufferedWriter(osw);String line4 = null;while ((line4=reader4.readLine()) != null) {if (!line4.trim().equals("")) {writer.write(line4+"\n");}}writer.flush();}}







0 0
原创粉丝点击