字节流,字符流简单演示(通过FileInputStream与FileReader拆分文件)

//字节流
package midProject;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class MidByteIoTest {
	
	public static void main(String[] args) throws Exception {
		//拆分文件
		MidByteIoTest.byteChaiFenTest();
		//合并文件
		MidByteIoTest.heBingTest();

	}
	//文本内容:一二三。拆分文件。
	public static void byteChaiFenTest() throws Exception{
		//创建文件对象流			inputStreamReader才有编码的效果
		File file =new File("e:/Java练习文件夹/字节流拆分.txt");
		FileInputStream fis=new FileInputStream(file);
		FileOutputStream fos = null;
		//创建容器
		byte[] c =new byte[2];
		//读取数据
		int in =(int) (file.length()/2);
		int i = 0,len=0;	
		while((len=fis.read(c))!=-1) {			
			fos=new FileOutputStream("e:/Java练习文件夹/字节流拆分-" + i+".txt");
			System.out.println(len);
			fos.write(c,0,len);//此处应该理解为,每次从下标0的位置开始取值,每次取len个值
			i++;
		}
		fis.close();
		fos.close();
		for (int j=0; j<=in; j++) {
            File f = new File("e:/Java练习文件夹/字节流拆分-" + j+".txt");
            if (f.length()!=0) {
            	System.out.printf("输出子文件%s,其大小是%,d字节%n", f.getName(), f.length());
			}           
        }
	}
	//合并方法
	public static void heBingTest() throws Exception {
		FileInputStream fis=null;
		FileOutputStream fos=new FileOutputStream(new File("e:/Java练习文件夹/字节流拆分3.txt"));;
		byte[] by= new byte[10];
		for (int i = 0; i <3; i++) {
			fis=new FileInputStream(new File("e:/Java练习文件夹/字节流拆分-" + i+".txt"));
			int len;	
			if ((len=fis.read(by))!=-1) {
				fos.write(by,0,len);
			}
						
		}
		fis.close();
		fos.close();
		}	
}

//字符流
package midProject;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;
import java.util.Arrays;

public class MidCharIoTest {
	//测试
	public static void main(String[] args) throws Exception {
		//拆分测试
		MidCharIoTest.charChaiFenTest();
		//合并测试
		MidCharIoTest.charHebingTest();
		//设置编码字符
		MidCharIoTest.charSetTest();
		//去除标识符测试
		MidCharIoTest.deleteRom();
		//readline测试
		MidCharIoTest.readLineTest();
	}	
	public MidCharIoTest() {
		System.out.println("new 对象时就会调用类本身的无参构造,当然,如果有有参构造,那就调用有参的");
	}
	public  MidCharIoTest(int m) {
		m=2;
		System.out.println(m);
	}	
	/*找到一个大于10k的文件,按照10k为单位,拆分成多个子文件,并且以编号作为文件名结束。*/
	public static void charChaiFenTest() throws Exception {
		//创建流、容器
		Reader re=new FileReader(new File("e:/Java练习文件夹/字符流拆分.txt"));
		//InputStreamReader re = new InputStreamReader(new FileInputStream("e:/Java练习文件夹/字符流拆分.txt"));
		char[] c =new char[2];
		Writer wr=null;
		int len=0;
		int i=0;
		//拆分				
		while ((len=re.read(c))!=-1) {	//while的用法此处类似于for无限循环,当满足条件时就跳出循环。
			System.out.print(len+"\t");
			System.out.println(c);
		    wr =new FileWriter(new File("e:/Java练习文件夹/字符流拆分-"+i+".txt"));
			wr.write(c, 0, len);
			i++;	
			wr.flush();	//字符流方式读取的缓存区,因此得用flush方法写一串读出一串。
		}
		wr.close();	
		re.close();//记得关闭流。
		File file=new File("e:/Java练习文件夹/字符流拆分.txt");
		
		for (int j=0; j<=(int)(file.length())/2 ; j++) {
            File f = new File("e:/Java练习文件夹/字符流拆分-" + j+".txt");
            if (file.length()!=0) {
            	System.out.printf("输出子文件%s,其大小是%,d字节%n", f.getName(), f.length());
            }
		}
	}
	//合并
	public static void charHebingTest() throws Exception {
		//容器
		char[] c=new char[2];
		int len;
		//创建流对象
		for (int i = 0; i < 2; i++) {
			Reader re = new FileReader(new File("e:/Java练习文件夹/字符流拆分-" + i+".txt"));
			Writer wr = new FileWriter(new File("e:/Java练习文件夹/字符流拆分3.txt"),true);
			while ((len=re.read(c))!=-1) {
				wr.write(c, 0, len);
			}
			
			re.close();
			wr.close();
		}		
	}
	//字符流中文问题
	//16进制E5 B1 8C 用UTF-8编码对应的的汉字是:
	public static void charSetTest() throws Exception {
		File file =new File("e:/Java练习文件夹/java中文问题.txt");
		//Reader re= new FileReader(file);
		InputStreamReader re=new InputStreamReader(new FileInputStream(file),"utf-8");//java偷懒,reader没有此方法,只有上级InputStreamReader才有此方法
		char[] by=new char[(int)(file.length())];		
		while (re.read(by)!=-1) {
			System.out.println(by);
		}
		re.close();
		//进制转换
		byte[] bs = {(byte) 0xE5,(byte) 0xB1,(byte) 0x8C};       
        String str = new String(bs,"UTF-8");
        System.out.println("E5 B1 8C 用UTF-8编码对应的的汉字是:"+str);
	}
	//如果用记事本根据UTF-8编码保存汉字就会在最前面生成一段标示符,这个标示符用于表示该文件是使用UTF-8编码的。    
    //找出这段标示符对应的十六进制,并且开发一个方法,自动去除这段标示符
	public static void deleteRom() throws Exception, FileNotFoundException {
		File file =new File("e:/Java练习文件夹/java中文问题.txt");
		InputStreamReader re=new InputStreamReader(new FileInputStream(file),"utf-8");
		char[] by = new char[(int) file.length()];
		re.read(by);
		for (byte b:Arrays.toString(by).getBytes()) {
			int i=b&0xff;	//补码-数据类型由大到小,需要补码。
			System.out.print(Integer.toHexString(i)+"\t");//十六进制跟int整数型互转,前人已经写好了方法
		}
		re.close();
	}
	//readLine方法读一行就输出,然后换行继续读一行输出。
	public static void readLineTest() throws Exception {
		File file=new File("e:/Java练习文件夹/javaReadLineTest.txt");
		if (!file.exists()) {
			file.createNewFile();
		}
		String line=null;
		BufferedWriter bw=new BufferedWriter(new FileWriter(file));
		bw.write("  你说神马,没说神马");
		bw.flush();
		BufferedReader br=new BufferedReader(new FileReader(file));
		while((line=br.readLine())!=null) {
			System.out.println(new String(line).trim());
		}
		
		br.close();
		bw.close();
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值