前面讲解了IO的原理以及使用,下面针对于中文读取于拷贝问题看几个例子,掌握下面的东西java所有 IO基本上也就那些东西了,话不多说看例子:
package io; 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.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; public class IOTest { public static void main(String[] args) throws Exception{ final File file = new File("F:\\1.txt"); new Thread(new Runnable() { @Override public void run() { try { String str = readChar(file); System.out.println(Thread.currentThread().getName()+"--->"+str); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { String str = readString(file); System.out.println(Thread.currentThread().getName()+"--->"+str); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); new Thread(new Runnable() { @Override public void run() { try { System.out.println(Thread.currentThread().getName()+"已执行!"); read_write_string(file); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } /** * 字节的形式读取 * 需指定大小 * @param file * @return * @throws Exception */ private static String readChar(File file) throws Exception{ InputStream in = new FileInputStream(file); byte[] b=new byte[(int) file.length()];//如果知道file可以指定file的大小作为数组的大小 // byte[] b=new byte[in.available()];//如果不知道file,可以指定流的大小 BufferedInputStream bufferIn = new BufferedInputStream(in,10);//创建缓冲输入流,缓冲区大小为10 bufferIn.read(b);//直接把二进制流读入流 bufferIn.close(); in.close(); return new String(b); // return new String(b,"GBK");//指定编码中文才能转换 } /** * 字符的形式读取 * 需指定大小 * @param file * @return * @throws Exception */ private static String readString(File file) throws Exception{ InputStream in = new FileInputStream(file);//获得文件字节流 Reader reader = new InputStreamReader(in, "GBK");//字节流转换为字符流并指定编码中文 BufferedReader bufferedReader = new BufferedReader(reader,10); //运用字符缓冲流进行包装,缓冲区大小为10 char[] c=new char[(int) file.length()]; // char[] c=new char[(in.available()];//通过文件来判断的大小 bufferedReader.read(c);//通过输入流来判断大小 bufferedReader.close(); reader.close(); in.close(); return new String(c); } /** * 行的形式读取 * 无需指定大小 * @param file * @return * @throws Exception */ private static String readLine(File file) throws Exception{ InputStream in = new FileInputStream(file);//获得文件字节流 Reader reader = new InputStreamReader(in, "GBK");//字节流转换为字符流并指定编码中文 // InputStreamReader reader = new InputStreamReader(in, "GBK"); // System.out.println("encoding:"+reader.getEncoding());//得到流的编码 BufferedReader bufferedReader = new BufferedReader(reader,10); //运用字符缓冲流进行包装,缓冲区大小为10 String temp = ""; String temp ="";//临时保存读取到的数据 String str= "";//累加临时数据 while((temp=bufferedReader.readLine())!=null) { str = str +temp; } bufferedReader.close(); reader.close(); in.close(); return str; } /** * 字节边读边写 * @param file * @return * @throws Exception */ private static void read_write_char(File file) throws Exception{ InputStream in = new FileInputStream(file); BufferedInputStream bufIn = new BufferedInputStream(in,10);//字节缓冲输入流 OutputStream out = new FileOutputStream("F:\\2.txt"); BufferedOutputStream buffOut = new BufferedOutputStream(out, 10);//字节缓冲输出流 byte[] b = new byte[2];//每次取出2字节进行写入 while((bufIn.read(b)!=-1) { buffOut.write(b);//每次2字节循环写入 } buffOut.close(); out.close(); bufIn.close(); in.close(); } /** * 字符边读边写(不推荐用,文件有中文必须字节转字符流指定编码,否则出现乱码) * @param file * @throws Exception */ private static void read_write_string(File file) throws Exception{ Reader reader = new FileReader(file); BufferedReader bufReader = new BufferedReader(reader,10);//字符缓冲输入流 Writer writer = new FileWriter("F:\\2.txt"); BufferedWriter buffWriter = new BufferedWriter(writer, 10);//字符缓冲输出流 char[] c = new char[2];//每次取出2字符进行写入 while(bufReader.read(c)!=-1) { buffWriter.write(c);//每次2字节循环写入 } buffWriter.flush(); writer.flush(); buffWriter.close(); writer.close(); bufReader.close(); reader.close(); } }
注意:
-
public abstract int read() throws IOException
从输入流读取数据的下一个字节。 值字节被返回作为int
范围0
至255
。 如果没有字节可用,因为已经到达流的末尾,则返回值-1
。 该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。一个子类必须提供这个方法的一个实现。
- 结果
- 数据的下一个字节,如果达到流的末尾,
-1
。-
public int read(byte[] b) throws IOException
从输入流读取一些字节数,并将它们存储到缓冲区b
。 实际读取的字节数作为整数返回。 该方法阻塞直到输入数据可用,检测到文件结束或抛出异常。如果
b
的长度为零,则不会读取字节并返回0
; 否则,尝试读取至少一个字节。 如果没有字节可用,因为流在文件末尾,则返回值-1
; 否则,读取至少一个字节并存储到b
。第一个字节读取存储在元素
b[0]
,下一个字节存入b[1]
等等。 读取的字节数最多等于b
的长度。 令k为实际读取的字节数; 这些字节将存储在元素b[0]
至b[
k-1]
,使元素b[
k]
至b[b.length-1]
不受影响。- 参数
b
- 读取数据的缓冲区。- 结果
- 读取到缓冲区的总字节数,或者如果没有更多的数据,因为已经到达流的末尾,则是
-1
。- read():方法返回的是下一个字节的强转的整形数
- read(byte[]):方法返回的是已经读取的多少字节总数
相关推荐
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教程,java IO教程,java IO教程,java IO...
Java教程之javaIO详解Java教程之javaIO详解Java教程之javaIO详解
java之io流实例应用。
关于java io技术的详解:IO(Input/Output)是计算机输出/输出的接口。Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出...
java基础之IO流,基础简介知识,帮助你了解java的io技术
java.io.Reader 和 java.io.InputStream 的区别
Java_IO完全总结 Java_IO完全总结Java_IO完全总结 Java_IO完全总结
有关java高级io流详解,对java中io流的操作需要注意的地方都有讲解。
IO流 javaio java 流
Java 网络IO简介: bio nio aio
彻底明白Java的IO系统---java之精髓IO流
java.io.CharConversionException: isHexDigit.最近项目运行出现了这个问题,刚开始就知道是编码问题,怎么改编码都不正确,在网上搜到的文章。
JAVA教程 io流操作 JAVA教程 io流操作 JAVA教程 io流操作
Java_IO流详解Java_IO流详解Java_IO流详解
java调用io流,InputStreamReader,BufferReader读取文件
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零基础自学 之 JavaIO流处理java零基础自学 之 JavaIO流处理
关于java的IO流基础的练习,适合刚接触IO流,没有基础的同学
java_IO操作_(读写、追加、删除、移动、复制等)
java-IO框架图