JavaSe——IO流_Part2

来源:互联网 发布:python 3.7 编辑:程序博客网 时间:2024/06/05 17:07

A.转换流

l  由于字节流操作中文不是特别方便,所以,java就提供了转换流。

l  字符流=字节流+编码表。

package com.core.io.demo;import java.io.UnsupportedEncodingException;import java.util.Arrays;public class Test {public static void main(String[] args) throws UnsupportedEncodingException {//String---byteString s = "你好";byte[] bs1 = s.getBytes();byte[] bs2 = s.getBytes("GBK");byte[] bs3 = s.getBytes("utf-8");System.out.println(Arrays.toString(bs1));//[-60, -29, -70, -61]System.out.println(Arrays.toString(bs2));//[-60, -29, -70, -61]System.out.println(Arrays.toString(bs3));//[-28, -67, -96, -27, -91, -67]//bye----Stringbyte[] bs4 = {-60, -29, -70, -61};System.out.println(new String(bs4));//你好System.out.println(new String(bs4,"GBK"));//你好byte[] bs5 = {-28, -67, -96, -27, -91, -67};System.out.println(new String(bs5,"utf-8"));//你好System.out.println(new String(bs5));//浣犲ソSystem.out.println(new String(bs4,"utf-8"));//???}}


B.转换流OutputStreamWriter

package com.core.io.demo;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;public class Test2 {// 转换流,OutputStreamWriter的使用public static void main(String[] args) throws UnsupportedEncodingException,IOException {// OutputStreamWriter(OutputStream out)// 创建使用默认字符编码的 OutputStreamWriter。// OutputStreamWriter(OutputStream out, Charset cs)// 创建使用给定字符集的 OutputStreamWriter。// OutputStreamWriter(OutputStream out, CharsetEncoder enc)// 创建使用给定字符集编码器的 OutputStreamWriter。// OutputStreamWriter(OutputStream out, String charsetName)// 创建使用指定字符集的 OutputStreamWriter。// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(// "osw.txt"));// 默认使用GBK// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(// "osw.txt"),"GBK");// 指定使用GBKOutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("osw.txt"), "UTF-8");// 指定使用UTF-8osw.write("中国UTF-8");// 不需要getbytes了osw.close();}}


C.转换流InputStreamWriter


package com.core.io.demo;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;public class Test3 {// 转换流,InputStreamWriter的使用public static void main(String[] args) throws IOException {InputStreamReader isr = new InputStreamReader(new FileInputStream("osw-gbk.txt"));// 使用指定编码(gbk),读取数据// 一次读取一个字符int ch = 0;while ((ch = isr.read()) != -1) {System.out.print((char) ch);// 中国gbk}isr.close();InputStreamReader isr2 = new InputStreamReader(new FileInputStream("osw-utf.txt"), "utf-8");// 使用指定字符集读取数据int ch2 = 0;while ((ch2 = isr2.read()) != -1) {System.out.print((char) ch2);// 中国UTF-8}// 关资源isr2.close();}}


D.字符流的5种写数据的方式

l  OutputStreamWriter写数据方法

•    public void write(int c)

•    public void write(char[] cbuf)

•    public void write(char[] cbuf,int off,int len)

•    public void write(String str)

•    public void write(String str,int off,int len)

l  字符流操作要注意的问题

•    flush()的作用

•    flush()和close()的区别


package com.core.io.demo;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;public class Test4 {// D.字符流的5种写数据的方式// l OutputStreamWriter写数据方法// • public void write(int c)// • public void write(char[] cbuf)// • public void write(char[] cbuf,int off,int len)// • public void write(String str)// • public void write(String str,int off,int len)// l 字符流操作要注意的问题// • flush()的作用// • flush()和close()的区别public static void main(String[] args) throws IOException {OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("osw.txt"));//写一个字符osw.write(97);osw.write('a');//写一个字符数组char[] chs = {'b','c','d',102,103};osw.write(chs );//写一个换行osw.write("\n\r");//写一个字符数组的一部分osw.write(chs, 1, 2);//写一个字符串String str = "中国 China";osw.write(str);//写一个字符串的一部分osw.write(str,0,2);//刷新缓冲区osw.flush();osw.close();//aabcdfg////cd中国 China中国}}


E.字符流的2种读数据的方式

1.一次读一个字符
2.一次读一个字符数组

package com.core.io.demo;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;public class Test5 {// 字符流读取数据的两种方式public static void main(String[] args) throws IOException {// A.一次读取一个字符InputStreamReader isr = new InputStreamReader(new FileInputStream("file.java"));int ch = 0;while ((ch = isr.read()) != -1) {System.out.print((char) ch);}isr.close();// B.一次读取一个字符数组System.out.println("-----------------");InputStreamReader isr2 = new InputStreamReader(new FileInputStream("file.java"));char[] chs = new char[1024];int len = 0;while((len = isr2.read(chs))!=-1){System.out.print(new String(chs,0,len));}isr2.close();}}

F.字符流文件复制

package com.core.io.demo;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;public class Test6 {// 字符流文件复制的两种方式public static void main(String[] args) throws IOException {// A.一次读取一个字符InputStreamReader isr = new InputStreamReader(new FileInputStream("file.java"),"UTF-8");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("fileA.java"),"UTF-8");int ch = 0;while ((ch = isr.read()) != -1) {osw.write(ch);}isr.close();osw.close();// B.一次读取一个字符数组System.out.println("-----------------");InputStreamReader isr2 = new InputStreamReader(new FileInputStream("file.java"),"UTF-8");OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("fileB.java"),"UTF-8");char[] chs = new char[1024];int len = 0;while((len = isr2.read(chs))!=-1){osw2.write(chs, 0, len);}isr2.close();osw2.close();}}


G.转换流的简化书写,FileReader&FileWriter

转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们书写,转换流提供了对应的子类。
FileWriter
FileReader

package com.core.io.demo2;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {// FileReader & FileWriterFileReader fr = new FileReader("file.java");FileWriter fw = new FileWriter("fileA.java");// 方法1:一次读写一个字符int ch;while ((ch = fr.read()) != -1) {fw.write(ch);}fr.close();fw.close();// 方法2:一次读写一个字符数组FileReader fr2 = new FileReader("file.java");FileWriter fw2 = new FileWriter("fileB.java");int len =0;char[] chs = new char[1024];while((len = fr2.read(chs))!=-1){fw2.write(chs, 0, len);}fr2.close();fw2.close();}}


H.字符缓冲输出流BufferedWriter & 字符缓冲输入流BufferedReader

特殊用法

BufferedWriter

-newLine()

BufferedReader

-readLine()

使用字符缓存流复制数据的3种方式

package com.core.io.demo2;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test2 {// 使用字符缓存流复制数据3种方式public static void main(String[] args) throws IOException {method1();method2();method3();}// 使用字符缓存流的特殊方法读取数据private static void method3() throws IOException {BufferedReader br = new BufferedReader(new FileReader("file.java"));BufferedWriter bw = new BufferedWriter(new FileWriter("fileE.java"));String line = null;while((line = br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}// 关资源br.close();bw.close();}// 一次读写一个字符数组private static void method2() throws IOException {BufferedReader br = new BufferedReader(new FileReader("file.java"));BufferedWriter bw = new BufferedWriter(new FileWriter("fileD.java"));int len = 0;char[] chs = new char[1024];while ((len = br.read(chs)) != -1) {bw.write(chs, 0, len);bw.flush();}// 关资源br.close();bw.close();}// 一次读写一个字符private static void method1() throws IOException {BufferedReader br = new BufferedReader(new FileReader("file.java"));BufferedWriter bw = new BufferedWriter(new FileWriter("fileC.java"));int ch = 0;while ((ch = br.read()) != -1) {bw.write(ch);}// 关资源br.close();bw.close();}}





I .复制文本文件的5种方式案例(字符流)

FileWriter & FileReader:  一次读一个字符、一个读一个字符数组

BufferedWriter & BufferedReader : 一次读一个字符、一个读一个字符数组、特殊的方法(newLine()、readLine())


J.复制图片的4种方式案例(字节流)

FileOutputStream & FileInputStream: 一次读一个字符、一个读一个字符数组

BufferedOutputStream & BufferedInputStream:一次读一个字符、一个读一个字符数组


K.文件和集合ArrayList

package com.core.io.demo2;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;public class Test3 {// ArrayList存进文件// 文件取出来存到ArrayListpublic static void main(String[] args) throws IOException {ArrayList<String> list = new ArrayList<String>();list.add("hello");list.add("world");list.add("java");list.add("android");FileWriter fw = new FileWriter("list.txt");BufferedWriter bw = new BufferedWriter(fw);for (String str : list) {bw.write(str);bw.newLine();bw.flush();}bw.close();System.out.println("-----------");BufferedReader br = new BufferedReader(new FileReader("list.txt"));ArrayList<String> list2 = new ArrayList<String>();String line = null;while((line= br.readLine())!=null){list2.add(line);}br.close();for (String str : list2) {System.out.println(str);}}}

L.复制单级文件夹案例

package com.core.io.demo2;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.FilenameFilter;import java.io.IOException;import java.util.Arrays;public class Test4 {public static void main(String[] args) throws IOException {// 复制单机文件夹// E:\temp\a----》E:\temp\b// method1();// 复制单级目录指定后缀名并修改后缀名System.out.println("over...");method2();}private static void method2() throws IOException {File srcFile = new File("e:\\temp\\a");File desFile = new File("e:\\temp\\c");if (!desFile.exists()) {desFile.mkdir();}File[] listFiles = srcFile.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return new File(dir, name).isFile() && name.endsWith(".java");}});System.out.println(Arrays.toString(listFiles));for (File file : listFiles) {String name = file.getName();File newFile = new File(desFile, name);copyFile2(file, newFile);String newName = name.replace(".java", ".jad");File newNameFile = new File(desFile, newName);newFile.renameTo(newNameFile);}}private static void copyFile2(File file, File newFile) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));byte[] bys = new byte[1024];int len = 0;while ((len = bis.read(bys)) != -1) {bos.write(bys, 0, len);}bos.close();bis.close();}private static void method1() throws IOException {File srcFile = new File("e:\\temp\\a");File[] listFiles = srcFile.listFiles();File desFile = new File("e:\\temp\\b");if (!desFile.exists()) {desFile.mkdir();}for (File file : listFiles) {String name = file.getName();File newFile = new File(desFile, name);copyFile(file, newFile);}}private static void copyFile(File srcFile, File newFile) throws IOException {BufferedReader br = new BufferedReader(new FileReader(srcFile));BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));if (!newFile.exists()) {newFile.createNewFile();}String line = null;while ((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}bw.close();br.close();}}


M.复制多级文件夹案例

package com.core.io.demo2;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.FilenameFilter;import java.io.IOException;import java.util.Arrays;public class Test5 {public static void main(String[] args) throws IOException {// 复制多级文件File srcFile = new File("e:\\temp\\a");File desFile = new File("e:\\temp\\b");if (!desFile.exists()) {desFile.mkdir();}copyFolder(srcFile, desFile);System.out.println("over...");}private static void copyFolder(File srcFile, File desFile)throws IOException {if (srcFile.isDirectory()) {File newFloder = new File(desFile, srcFile.getName());newFloder.mkdir();File[] listFiles = srcFile.listFiles();for (File file : listFiles) {copyFolder(file, newFloder);}} else {String name = srcFile.getName();System.out.println("复制文件:" + name);File newFile = new File(desFile, name);copyFile(srcFile, newFile);}}private static void copyFile(File srcFile, File desFile) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile));byte[] bys = new byte[1024];int len = 0;while ((len = bis.read(bys)) != -1) {bos.write(bys, 0, len);}bos.close();bis.close();}}

N.LineNumberReader

package com.core.io.demo3;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.LineNumberReader;public class Test {public static void main(String[] args) throws IOException {//LineNumberReader//是bufferedReader的子类LineNumberReader lnr = new LineNumberReader(new FileReader("file.java"));String line = null;while((line = lnr.readLine())!=null){int lineNumber = lnr.getLineNumber();System.out.println(lineNumber+":"+line);}lnr.close();}}


         IO流

                   |--字节流

                            |--字节输入流

                                     InputStream

                                               intread():一次读取一个字节

                                               intread(byte[] bys):一次读取一个字节数组

                                    

                                               |--FileInputStream

                                               |--BufferedInputStream

                            |--字节输出流

                                     OutputStream

                                               voidwrite(int by):一次写一个字节

                                               voidwrite(byte[] bys,int index,int len):一次写一个字节数组的一部分

                                              

                                               |--FileOutputStream

                                               |--BufferedOutputStream

                   |--字符流

                            |--字符输入流

                                     Reader

                                               intread():一次读取一个字符

                                               intread(char[] chs):一次读取一个字符数组

                                              

                                               |--InputStreamReader

                                                        |--FileReader

                                               |--BufferedReader

                                                        StringreadLine():一次读取一个字符串

                            |--字符输出流

                                     Writer

                                               voidwrite(int ch):一次写一个字符

                                               voidwrite(char[] chs,int index,int len):一次写一个字符数组的一部分

                                              

                                               |--OutputStreamWriter

                                                        |--FileWriter

                                               |--BufferedWriter

                                                        voidnewLine():写一个换行符

                                                       

                                                        voidwrite(String line):一次写一个字符串













0 0
原创粉丝点击