前面讲解了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.io.CharConversionException: isHexDigit 处理详解 Java.io.CharConversionException: isHexDigit 是 Java 中一种常见的异常,通常发生在传输数据时编码不正确或 URL 传值时出现问题。本文将对该异常进行详细...
### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....
Java中的IO流是Java语言处理输入输出操作的重要组成部分,它为数据传输提供了强大的支持。本文将深入探讨Java的IO流实例应用,旨在帮助开发者更好地理解和掌握这一关键概念。 IO流在Java中分为两大类:字符流...
2. 字符流:对于处理文本数据,Java提供了`Reader`和`Writer`作为字符输入流和输出流的基类。` FileReader`和`FileWriter`是它们的典型应用,专用于文件的字符读写。 三、流的方向 Java的IO流分为四种基本类型,...
Java_IO流详解 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...
例如,javaio.bmp和javaio2.bmp可能是两张展示IO框架图的图片,其中详细描绘了不同类之间的继承关系和使用场景,帮助开发者更好地理解和掌握Java IO系统。 总结一下,Java IO框架是Java平台不可或缺的一部分,它为...
Java IO系统的设计原则之一是高度模块化和可扩展性,通过抽象出一系列接口来支持各种不同类型的I/O操作。例如,`InputStream`和`OutputStream`接口分别用于读取和写入数据,它们构成了Java IO系统的核心基础。此外,...
Java 网络IO简介: bio nio aio
Java的IO系统是Java编程中的核心部分,它允许程序与外部世界进行数据交换,包括读取文件、写入文件、网络通信以及设备交互等。理解并掌握Java的IO系统对于任何Java开发者,尤其是新手,都是至关重要的。在这个实例...
Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...
### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...
### Java IO详解 #### 1. 什么是IO 在计算机科学中,IO(Input/Output,输入/输出)指的是程序与外部系统之间进行数据交换的过程。在Java中,IO操作主要通过`java.io`包来实现,这个包包含了用于文件读写、标准...
在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...
### Java.io包详解 #### 一、概述 Java.io包是Java编程语言中非常重要的一个标准库,它提供了丰富的类和接口,支持多种输入/输出流的处理方式,包括文件I/O、网络通信等场景。Java.io包的核心设计思想是以流...
Java调用IO流是进行数据输入输出操作的核心技术之一,特别是在处理文件、网络通信和程序间数据传递时不可或缺。在Java中,IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节...
Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...
2. **FileInputStream 和 FileOutputStream(02_FileInputStream_FileOutputStream.avi)**:这两个类是Java IO中最基本的文件操作类,用于读取和写入文件。FileInputStream用于读取二进制数据,而FileOutputStream...