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种读数据的方式
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
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):一次写一个字符串
- JavaSe——IO流_Part2
- JavaSe——线程_Part2
- JavaSe——集合_Part2
- IO流_part2
- Javase—IO流
- JavaSe——IO流_Part1
- JavaSe——IO流_Part3
- JavaSE实战——IO流
- 黑马程序员—javaSE—IO流
- JavaSE 拾遗(10)——JavaSE IO...(1)
- JavaSE 拾遗(11)——JavaSE IO...(2)
- JavaSE 拾遗(12)——JavaSE IO...(3)
- JavaSe基础XX18——IO流_1
- JavaSe基础XX18——IO流_3
- JavaSe基础XX18——IO流_4
- JavaSe基础XX18——IO流_5
- JavaSe基础XX18——IO流_6
- JavaSe基础XX18——IO流_7
- java学习之文件字符流读取文件
- 2144
- Crazyflie笔记二:Crazyflie 1.0和2.0产品特点概述
- 6个值得推荐的Android开源框架简介
- nyoj-1162-数字
- JavaSe——IO流_Part2
- Xcode 断点调试技巧-工程崩溃问题的追踪方法
- Word怎么转换成PDF文件
- vim单词高亮的功能
- VB学习笔记——DateAdd函数
- Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
- Java基础(面向对象三——继承、final关键字、抽象类、接口)
- spring中classpath用法
- 2145