java IO

1. File 

练习:深度优先 遍历puth下所有文件夹和文件。

package test;

import java.io.File;

class getfileDFS{
	static int i =0;
	public void DFSFile (File f){
		if(f.isDirectory())
		{
			System.out.println("Directory name is :"+f.getName());
			File[] files= f.listFiles();
			for(File ff:files){
				DFSFile(ff);
			}
		}
		else{//f is a file ,not a directory
			System.out.println("filename is : "+f.getName());
		}
	}
}

public class FileOperator {
	public static void main (String args[])
	{
		String puth = "D:/how2j";
		File file = new File(puth);
		getfileDFS G = new getfileDFS();
		G.DFSFile(file);
	}
}

 

2 .  Stream

抽象类 :  InputStream  

                   OutputStream

练习:向文件中写入数据 ,用到子类 FileOutputStream  read() write()【字节流】

package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

class getfileDFS{
	
	public boolean W2F(File f,byte[] data){
		
		try {
			FileOutputStream fout = new FileOutputStream(f);
			
				fout.write(data);
			    fout.close();
				
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		}catch (IOException e){
			e.printStackTrace();
			return false;
		}
		
		return true;
	}
}

public class FileOperator {
	public static void main (String args[])
	{
		getfileDFS G = new getfileDFS();
		File wf = new File("D:/how2j/temp.txt");
		byte[] data = {65,66,67,97};
//这里定义的其实是ASCII码 ,
		if(G.W2F(wf,data))
		{
			System.out.println("写入成功!");
		}
	}
}

result:

ABCa

!!!  注意 : 输入 输出流 都需要关闭,可以再try 里(草率) 可以再 finally 里(正规)。

 

3【字符流】

Reader字符输入流 
Writer字符输出流 
专门用于字符的形式读取和写入数据  . FileReader 是Reader子类,以FileReader 为例进行文件读取

 

package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

class getfileDFS{
	public void W2FbyReader(File f){
			char[] temp = new char[(int)f.length()];
			try {
				FileReader fout = new FileReader(f);
			 	//read 形参char[] , 返回值 int
			 	System.out.println(fout.read(temp));
			 	for(char a:temp)
			 	{
			 		System.out.print(a);
			 	}
                fout.close();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}catch (IOException e){
				e.printStackTrace();
			}
	}
}


public class FileOperator {
	public static void main (String args[])
	{
		getfileDFS G = new getfileDFS();
		File wf = new File("D:/how2j/temp.txt");
		byte[] data = {65,66,67,97};
		G.W2FbyReader(wf);
	}
}

result:

4
ABCa

 

4 缓存流(由字符流构造)

BufferedReader 

PrintWriter 

eg 读入一个文件 删除所有 // 形式的注释 写回

package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


class IoTool{
	private static Matcher m;
	private static Pattern p = Pattern.compile("//.*");

	public static void removezs(File f){
		 
		try {
			FileReader fr = new FileReader(f);
			BufferedReader r = new BufferedReader(fr);
            ArrayList<String> temp = new ArrayList<String>();
            
            while(true){
            	 String line = r.readLine();
                 if (null == line)
                     break;
                 else{
                	 m = p.matcher(line);
                	 temp.add(m.replaceFirst(""));
                 }
                 //System.out.println(line);
            }
            FileWriter fw = new FileWriter(f);
            PrintWriter w = new PrintWriter(fw);

            for(String t:temp)
            {
            	w.println(t);
                System.out.println(t);
            }
            
			fw.close();
			fr.close();
			w.close();
			r.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}


public class myio {

	public static void main (String arges[])
	{
		File file = new File("d:/q.txt");
		IoTool it = new IoTool();
		IoTool.removezs(file);
	}
}

 

五 。数据流(由Stream构造)

DataInputStream 数据输入流 
DataOutputStream 数据输出流

注: 要用DataInputStream 读取一个文件,这个文件必须是由DataOutputStream 写出的,否则会出现EOFException,因为DataOutputStream 在写出的时候会做一些特殊标记,只有DataInputStream 才能成功的读取。

按照写的顺序读就好,不需要分隔符。

 public static void read() {
        File f =new File("d:/lol.txt");
        try (
                FileInputStream fis  = new FileInputStream(f);
                DataInputStream dis =new DataInputStream(fis);
        ){
            boolean b= dis.readBoolean();
            int i = dis.readInt();
            int ii = dis.readInt();
            String str = dis.readUTF();
             
            System.out.println("读取到布尔值:"+b);
            System.out.println("读取到整数:"+i);
            System.out.println("读取到整数:"+ii);
            System.out.println("读取到字符串:"+str);
 
        } catch (IOException e) {
            e.printStackTrace();
        }
         
    }
 
    public static void write() {
        File f =new File("d:/lol.txt");
        try (
                FileOutputStream fos  = new FileOutputStream(f);
                DataOutputStream dos =new DataOutputStream(fos);
        ){
            dos.writeBoolean(true);
            dos.writeInt(300);
            dos.writeInt(1);
            dos.writeUTF("123 this is gareen");
        } catch (IOException e) {
            e.printStackTrace();
        }
         
    }
    

 

六 ,对象流

注:把一个对象序列化有一个前提是:这个对象的类,必须实现了Serializable接口

//创建对象输出流
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos =new ObjectOutputStream(fos);
//创建对象输入流              
FileInputStream fis = new FileInputStream(f);
ObjectInputStream ois =new ObjectInputStream(fis);

oos.writeObject(h);
Hero h2 = (Hero) ois.readObject();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值