java.io 字节流与字符流及简单实例

java io是java中非常基础的知识点,对于通信和不涉及到数据库的项目java io应该是要经常使用。java io分为字节流和字符流,分清字节流和字符流的异同是掌握java io的起点。

字节流,最小单位是字节,通信协议中的X-MODEM和Y-MODEM协议传输单位就是字节流。java io中与字节流相关的主要类有:InputStream,OutputStream,FileInputStream,FileOutputStream。与字符流有关的主要类有:Writer,Reader,FileWriter,FileReader。将字符流与字节流联系起来的类为:InputStreamReader,OutputStreamWriter。字节流在读写文件过程中不涉及到缓冲,字符流在读写文件过程中涉及到缓冲,对于底层的信息传输使用字节流比较好,不存在没有对应的字符;而对于应用层的信息读写使用字符流比较好,英文字母占一字节,中文占两字节,使用字符流不会出现将中文截断的现象。io流的整体框架为:

图来源为:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html ,上图清晰的展示了字节流和字符流相关的类与继承关系。

还是通过相关的题目来深入了解字节流与字符流。

1.有两个文件1.txt,2.txt,要求读取文件一与文件二中的信息,将读取的信息交叉写入3.txt中,如果只是面试可以考虑的简单一些,不用考虑内存不足等问题。如果是实际项目中的问题需要考虑的全面。下面的代码只是针对普通笔试而言:

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestFileReader {

	public String filereader(String addr){
		File file = new File(addr);
		char[] ch = new char[2000];
		String sb="";
		int flag;
		try {
		    FileReader fr = new FileReader(file);
			while((flag = fr.read(ch) )!=-1 ){
				sb += String.valueOf(ch);
			}
			fr.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sb;
	}

	public void filewriter(String addr,String str){
		File file = new File(addr);
		try {
			FileWriter fw = new FileWriter(file);
			fw.write(str);
			fw.flush();
			fw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void main(String[] args){
		TestFileReader tfr = new TestFileReader();
		String str1;
		String str2;
		String str="";
		str1 = tfr.filereader("d:/1.txt");
		str2 = tfr.filereader("d:/2.txt");
		int i;
		for( i=0;i<str1.length();i++){
			str = str + str1.charAt(i);
			if(str2.length()>i){
				str = str + str2.charAt(i);
			}
		}
		if(i<str2.length()){
			str = str + str2.substring(i, str2.length());
		}

		tfr.filewriter("d:/3.txt", str);
	}

}

上面的代码实现了将两个文件读出然后交叉写入另一个文件中。是用String来接受文件中的内容,没有考虑内存问题。

2.将一个目录下的所有文件拷贝到另一个目录下。

import java.io.DataInputStream;
import java.io.DataOutputStream;
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.IOException;

public class TestFileReader {

	public void fileCopy(String sourcePath,String newPath){
		FileInputStream fis = null;
		FileOutputStream fos = null;
		DataInputStream dis = null;
		DataOutputStream dos = null;
		try {
			fis = new FileInputStream(sourcePath);
			dis = new DataInputStream(fis);
			fos = new FileOutputStream(newPath);
			dos = new DataOutputStream(fos);
			int temp;
			try {
				while((temp=dis.read())!=-1){
					dos.write(temp);
				}
				fis.close();
				dis.close();
				fos.close();
				dos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void folderCopy(String sourcePath,String newPath){
		File file = new File(sourcePath);
		if(!file.exists()){
			file.mkdir();
		}
		File[] files = file.listFiles();
		for(int i=0;i<files.length;i++){
			this.fileCopy(sourcePath+"/"+files[i].getName(), newPath+"/"+files[i].getName());
		}
	}

	public static void main(String[] args){
		TestFileReader tfr = new TestFileReader();
		tfr.folderCopy("D:/test", "D:/test1");

	}

}

上述代码依然是不够严密,但是作为解答面试题来说是够了,不够严密之处在于没有处理sourcePath中的文件夹的情况。

时间: 2024-11-07 14:29:47

java.io 字节流与字符流及简单实例的相关文章

JAVA IO 字节流与字符流

文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.       IO框架 从上图我们可以看出IO可以分为两大块 字节流和字符流 字节流是 InputStream 和 OutputStream 分别对应输入与输出 字符流是Reader和Writer分别对应输入与输出        ByteArrayInputStream  它字节数组输入流.继承于InputS

Java IO 字节流与字符流 (二)

概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 字节流的抽象基类 InputStream,OuputStream 字符流的抽象基类 Reader,Writer 注: 这些基类的子类都是以基类的名称结尾的,如FileReader,FileInputStream 字节流 字节流:以字符为导向的流 简单介绍一个例子,演示字节流对图片的复制 1: imp

Java IO 字节流与字符流 (三)

Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字符流操作的最小单位则是字符.可以先看一下IO流的概述: 下面首先是通过字符流对文件进行读取和写入: 1 package lib; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileNotFou

java中字节流与字符流的区别

字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流. 一.InputStream中的读取数据的方法如下: 1 .int read() 功能:读取一个字节的数据,并且返回读到得数据,如果返回-1,则表示读到输入流的末尾. 2.int read(byte[] b) 功能:从输入流中读取一定量的字节,并将其存储在字节数组b中,返回实际读取的字节数,如

java IO(三):字符流

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

14、IO (字节流、字符流)

输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 * 程序到文件称为输出 * c: Input * 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作 * 文件到程序称为输入 * d: IO操作 * 把上面的这种输入和输出动作称为IO操作 字节输出流OutputStream * A: 字节输出流OutputStream * a.概

字节流与字符流的简单应用

字符流带有缓冲区而 字节流没有缓冲区 当我们要复制音频,图片时考虑字节流(InputStream/OutputStream),文本时叫考虑字符流(Reader/Writer) 这是字节流复制图片的代码 1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.

Java文件字节流和字符流FileInputStream,FileOutputStream,FileReader,FileWriter

一,文件输入流和文件输出流:FileInputStream,FileOutputStream FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节.在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色. int read();int read(byte b[]);int read(byt

java使用字节流和字符流实现文件复制

大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现. 那究竟该怎么做那,话不多说,直接上代码: 一,使用字节流复制文件 public class FileByteCopy {public static void main(String[] args) { FileByteCopy f= new FileByteCopy(); try { f.copy("d:/File/1.txt","d:/CopyFile/1.txt"); } cat