java io实例详解

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

import java.io.PrintStream;

import java.io.PushbackInputStream;

import java.io.RandomAccessFile;

import java.io.SequenceInputStream;

import java.io.Serializable;

import java.io.Writer;

import java.util.zip.ZipEntry;

import java.util.zip.ZipException;

import java.util.zip.ZipFile;

import java.util.zip.ZipOutputStream;

import org.junit.Before;

import org.junit.Test;

/**

* 流操作

* @author Administrator

*

*/

public class FileOpera {

//String path="";

String str="";

@Before

public void init(){

//path="d:"+File.separator+"test";

str="d:"+File.separator+"test"+File.separator+"test.txt";

}

/*使用RandomAccessFile写入文件*/

@Test

public void testAccess() throws IOException{

init();

File file=new File(str);

RandomAccessFile f=new RandomAccessFile(file,"rw");

f.writeBytes("abcdef");

f.writeInt(21);

f.writeDouble(32.11);

f.close();  //会乱码

}

/*字节流输出到文件OutputStream InputputStream*/

@Test

public void testByte1() throws IOException{

init();

File file =new File(str);

//OutputStream out=new FileOutputStream(file);

OutputStream out=new FileOutputStream(file,true);

String s="总共多少人";

out.write(s.getBytes());//按字节

out.flush();

out.close();

}

/*字符流输出到文件 Reader(读) Writer(写)*/

@Test

public void testReader() throws IOException{

init();

File file=new File(str);

Writer writer=new FileWriter(file,true);

//Writer writer=new OutputStreamWriter(new FileOutputStream(file));//将字节输出流转换为字符输出流

writer.write("你好世界");

writer.flush();

writer.close();

}

/*内存字节流-------------使用内存操作流(字节方式)ByteArrayInputStream ByteArrayOutputStream*/

@Test

public void testByte() throws IOException{

String str="ROLLENHOLT";

ByteArrayInputStream input=new ByteArrayInputStream(str.getBytes());//以字节数组方式读入缓存区

ByteArrayOutputStream output=new ByteArrayOutputStream();

int temp=0;

while((temp=input.read())!=-1){

char ch=(char)temp;

output.write(Character.toLowerCase(ch));

}

String outStr=output.toString();

input.close();

output.close();

System.out.println(outStr);

}

/*字节管道流 主要是进行两个线程之间的通信  PipedOutputStream PipedInputStream */

@Test

public void testPied(){

Send send=new Send();

Revice recive=new Revice();

try{

//管道连接

send.getOut().connect(recive.getInput());

}catch (Exception e) {

e.printStackTrace();

}

new Thread(send).start();

new Thread(recive).start();

}

class Send implements Runnable{

private PipedOutputStream out=null;

public Send(){

out= new PipedOutputStream();

}

public PipedOutputStream getOut(){

return this.out;

}

@Override

public void run() {

String message="hello 中国";

try{

out.write(message.getBytes());

}catch (Exception e) {

e.printStackTrace();

}try{

out.close();

}catch (Exception e) {

e.printStackTrace();

}

}

}

class Revice implements Runnable{

private PipedInputStream input=null;

public Revice(){

this.input=new PipedInputStream();

}

public PipedInputStream getInput(){

return this.input;

}

public void run(){

byte[] b=new byte[1000];

int len=0;

try{

len=this.input.read(b);

}catch (Exception e) {

e.printStackTrace();

}try{

input.close();

}catch (Exception e) {

e.printStackTrace();

}

System.out.println("接受的内容为 "+(new String(b,0,len)));

}

}

/*打印流 PrintStream*/

@Test

public void testPrint() throws FileNotFoundException{

init();

File file=new File(str);

PrintStream print=new PrintStream(new FileOutputStream(file,true));

print.print("爱我中华");

print.flush();

print.close();

}

/*输出到屏幕上*/

@Test

public void testSreen(){

OutputStream out=System.out;

try{

out.write("hello".getBytes());

}catch (Exception e) {

e.printStackTrace();

}

try{

out.close();

}catch (Exception e) {

e.printStackTrace();

}

}

/*输入输出重定向*/

@Test

public void testRedirect(){

// 此刻直接输出到屏幕

System.out.println("hello");

init();

File file = new File(str);

try{

System.setOut(new PrintStream(new FileOutputStream(file,true)));

}catch(FileNotFoundException e){

e.printStackTrace();

}

System.out.println("这些内容在文件中才能看到哦!");

//重定向err输出

System.err.println("这些在控制台输出");

try{

System.setErr(new PrintStream(new FileOutputStream(file,true)));

}catch(FileNotFoundException e){

e.printStackTrace();

}

System.err.println("这些在文件中才能看到哦!");

}

/*BufferedReader只能接受字符流的缓冲区,因为每一个中文需要占据两个字节,所以需要将System.in这个字节输入流变为字符输入流,采用*/

@Test

public void testBuffer(){

BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));//将字节流转化为字符流

String str = null;

System.out.println("请输入内容");

try{

str = buf.readLine();

}catch(IOException e){

e.printStackTrace();

}

System.out.println("你输入的内容是:" + str);

}

/*数据操作流DataOutputStream、DataInputStream类*/

@Test

public void testData() throws IOException{

init();

File file=new File(str);

char[] ch = { ‘A‘, ‘B‘, ‘C‘ };

DataOutputStream out=new DataOutputStream(new FileOutputStream(file,true));

for(char temp : ch){

out.writeChar(temp);

}

out.close();

}

/*合并流 SequenceInputStream*/

@Test

public void testSequence() throws IOException{

File file1 = new File("d:" + File.separator +"test"+File.separator+"test.txt");

File file2 = new File("d:" + File.separator +"test"+File.separator+"hello2.txt");

File file3 = new File("d:" + File.separator +"test"+File.separator+"hello.txt");

if(!file1.exists()){

file1.createNewFile();

}

if(!file2.exists()){

file2.createNewFile();

}

if(!file3.exists()){

file3.createNewFile();

}

InputStream input1 = new FileInputStream(file1);

InputStream input2 = new FileInputStream(file2);

OutputStream output = new FileOutputStream(file3);

// 合并流

SequenceInputStream sis = new SequenceInputStream(input1, input2);

int temp = 0;

while((temp = sis.read()) != -1){

output.write(temp);

}

input1.close();

input2.close();

output.close();

sis.close();

}

/*文件压缩 ZipOutputStream类*/

@Test

public void testZip() throws IOException{

init();

File file=new File(str);

String path="d:"+File.separator+"test"+File.separator+"test.zip";

File zipFile=new File(path);

InputStream in=new FileInputStream(file);

ZipOutputStream zip=new ZipOutputStream(new  FileOutputStream(zipFile));

zip.putNextEntry(new ZipEntry(file.getName()));

// 设置注释

zip.setComment("hello");

int temp = 0;

while((temp = in.read()) != -1){

zip.write(temp);

}

in.close();

zip.close();

}

/*解压缩ZipFile类*/

@Test

public void testZipFile() throws ZipException, IOException{

init();

String str="d:"+File.separator+"test"+File.separator+"test.zip";

String path="d:"+File.separator+"test"+File.separator+"zip.txt";

File file=new File(str);

File zipf=new File(path);

ZipFile zipFile = new ZipFile(file);

System.out.println("压缩文件的名称为:" + zipFile.getName());

ZipEntry entry = zipFile.getEntry("test.txt");

InputStream input = zipFile.getInputStream(entry);

OutputStream output = new FileOutputStream(zipf);

int temp = 0;

while((temp = input.read()) != -1){

output.write(temp);

}

input.close();

output.close();

}

/*PushBackInputStream回退流*/

@Test

public void testPush() throws IOException{

String str = "hello,rollenholt";

PushbackInputStream push = null;

ByteArrayInputStream bat = null;

bat = new ByteArrayInputStream(str.getBytes());

push = new PushbackInputStream(bat);

int temp = 0;

while((temp = push.read()) != -1){

if(temp == ‘,‘){

push.unread(temp);

temp = push.read();

System.out.print("(回退" + (char) temp + ") ");

}else{

System.out.print((char) temp);

}

}

}

/*System 类的一些操作*/

@Test

public void testSys(){

System.out.println("系统默认编码为:" + System.getProperty("file.encoding"));

}

/**

* 将一个对象流化即实现Serializable接口(默认将全部属性序列化)还可以实现一组对象的序列化

* 如果不想全部属性被实例化可以在实体中使用如private transient String name;  transient属性

* 可以在对象输入(ObjectInputStream)输出(ObjectOutputStream)流中直接操作对象

*

* 实现Externalizable接口,可以将部分属性实例化

*

*

* @throws IOException

* @throws ClassNotFoundException

*/

/*ObjectOutputStream*/

@Test

public void testObject() throws IOException, ClassNotFoundException{

init();

File file = new File(str);

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file,true));

oos.writeObject(new Person("laoma", 20,"男"));

oos.close();

//查看

ObjectInputStream input = new ObjectInputStream(new FileInputStream(file));

Object obj = input.readObject();

input.close();

System.out.println(obj);

}

/*PushBackInputStream回退流*/

@Test

public void testRect(){

}

}

参考自:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-15 03:27:20

java io实例详解的相关文章

java 泛型实例详解(普通泛型、 通配符、 泛型接口)

java 泛型详解(普通泛型. 通配符. 泛型接口) 2013-02-04 19:49:49| 分类: JAVA | 标签:java |举报|字号 订阅 下载LOFTER客户端 JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能-----Java的泛型. 1.Java泛型 其实Java的泛型就是创建一个用类型作为参数的类.就象我们写类的方法一样,方法是这样的method(String str1,String

Java IO流详解

初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializa

Java IO最详解

初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializa

java IO流详解(一)

从本篇博文开始,详细讲解JAVA IO流的基本操作,力求每一个例子都给大家一个DEMO,在最终完成的时候,我会贴出最终的源码,方便大家交流学习. 上一篇博文中转载了大神的博文和图片,非常好! 文章链接如下:Java IO流 下面一个个的用实例进行讲解每个IO流的基本用法. 1 File文件 public static void main(String[] args) throws IOException { File file = new File("."); myPrint(file

Java IO流详解(二)——File类

在上一章博客中简单的介绍了Java IO流的一些特征.也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起. File类的描述:File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建.查找和删除等操作.即Java中把文件或者目录(文件夹)都封装成File对象.也就是说如果我们要去操作硬盘上的文件或者目录只要创建File这个类即可. 不过要注意的是File类只是对文件的操作类,只能对文件本身进行操作,不能对文件内容进行操作. 1.File

Java正则表达式实例详解

创建正则表达式 你可以从比较简单的东西入手学习正则表达式.要想全面地掌握怎样构建正则表达式,可以去看JDK 文档的java.util.regex 的Pattern 类的文档. 字符 B 字符B \xhh 16进制值0xhh 所表示的字符 \uhhhh 16进制值0xhhhh 所表示的Unicode字符 \t Tab \n 换行符 \r 回车符 \f 换页符 \e Escape 正则表达式的强大体现在它能定义字符集(character class).下面是一些最常见的字符集及其定义的方式,此外还有

Java IO流详解(五)

使用的是InputStreamReader和OutputStreamWriter,它们本身属于的是reader和writer字符流,我们之所以会用到这些转化流是因为系统有时候只给我们提供了字节流,为了方便操作,要用到字符流.比如说System.in标准输入流就是字节流.你想从那里得到用户在键盘上的输入,只能是以转换流将它转换为Reader以方便自己的程序读取输入.再比如说Socket里的getInputStream()很明显只给你提供字节流,你要想读取字符,就得给他套个InputStreamRe

Java IO流详解(四)

Serializable序列化 1 对象的序列化 class Person implements Serializable { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return "Name:" + this.name + ", Age:&

《java基础知识》Java IO流详解

Java IO概念 1. 用于设备之间的数据传输. 2. Java 将操作数据流的功能封装到了IO包中. 3. 数据流流向分:输入流和输出流,操作对象为文件. 4. 流按照操作数据分:字节流(通用)和字符流. 5. 将计算机语言:二进制数据转换成文件显示到电脑上. IO包:继承关系图: 字符流: Reader :读取字符流,方法见API. Writer :写入字符流,方法见API. 案例(Writer ): import java.io.*; public class var { public