`
747017186
  • 浏览: 331377 次
社区版块
存档分类
最新评论

java之IO(2)

 
阅读更多

前面讲解了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范围0255 。 如果没有字节可用,因为已经到达流的末尾,则返回值-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[]):方法返回的是已经读取的多少字节总数 
  • 大小: 14.4 KB
分享到:
评论

相关推荐

    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教程,java IO教程,java IO...

    java.io.CharConversionException: isHexDigit处理

    Java.io.CharConversionException: isHexDigit 处理详解 Java.io.CharConversionException: isHexDigit 是 Java 中一种常见的异常,通常发生在传输数据时编码不正确或 URL 传值时出现问题。本文将对该异常进行详细...

    java.io.Reader 和 java.io.InputStream 的区别

    ### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....

    java之io流实例

    Java中的IO流是Java语言处理输入输出操作的重要组成部分,它为数据传输提供了强大的支持。本文将深入探讨Java的IO流实例应用,旨在帮助开发者更好地理解和掌握这一关键概念。 IO流在Java中分为两大类:字符流...

    Java-Io流,练习

    2. 字符流:对于处理文本数据,Java提供了`Reader`和`Writer`作为字符输入流和输出流的基类。` FileReader`和`FileWriter`是它们的典型应用,专用于文件的字符读写。 三、流的方向 Java的IO流分为四种基本类型,...

    Java_IO流详解

    Java_IO流详解 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    java-IO框架图

    例如,javaio.bmp和javaio2.bmp可能是两张展示IO框架图的图片,其中详细描绘了不同类之间的继承关系和使用场景,帮助开发者更好地理解和掌握Java IO系统。 总结一下,Java IO框架是Java平台不可或缺的一部分,它为...

    Java_IO完全总结

    Java IO系统的设计原则之一是高度模块化和可扩展性,通过抽象出一系列接口来支持各种不同类型的I/O操作。例如,`InputStream`和`OutputStream`接口分别用于读取和写入数据,它们构成了Java IO系统的核心基础。此外,...

    Java 网络IO简介

    Java 网络IO简介: bio nio aio

    彻底明白java的io系统

    Java的IO系统是Java编程中的核心部分,它允许程序与外部世界进行数据交换,包括读取文件、写入文件、网络通信以及设备交互等。理解并掌握Java的IO系统对于任何Java开发者,尤其是新手,都是至关重要的。在这个实例...

    Java教程之javaIO详解

    Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...

    java基础之IO流

    ### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...

    java_io详解

    ### Java IO详解 #### 1. 什么是IO 在计算机科学中,IO(Input/Output,输入/输出)指的是程序与外部系统之间进行数据交换的过程。在Java中,IO操作主要通过`java.io`包来实现,这个包包含了用于文件读写、标准...

    java小项目练习IO实现

    在Java编程领域,IO(Input/Output)技术是不可或缺的一部分,尤其在处理数据持久化、文件操作、网络通信等方面发挥着重要作用。在这个“java小项目练习IO实现”中,我们将探讨如何利用Java的IO流来实现本地数据的...

    java.io包讲解

    ### Java.io包详解 #### 一、概述 Java.io包是Java编程语言中非常重要的一个标准库,它提供了丰富的类和接口,支持多种输入/输出流的处理方式,包括文件I/O、网络通信等场景。Java.io包的核心设计思想是以流...

    java调用io流

    Java调用IO流是进行数据输入输出操作的核心技术之一,特别是在处理文件、网络通信和程序间数据传递时不可或缺。在Java中,IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节...

    IO流 javaio java 流

    Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...

    java_IO.rar

    2. **FileInputStream 和 FileOutputStream(02_FileInputStream_FileOutputStream.avi)**:这两个类是Java IO中最基本的文件操作类,用于读取和写入文件。FileInputStream用于读取二进制数据,而FileOutputStream...

Global site tag (gtag.js) - Google Analytics