Java IO---03

1.打印流,可以直接写入文件

PrintStream  &&  PrintWriter

package cn.io.java.mhz;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

/**
 * Java IO 打印流  PrintStream
 * @author MHZ
 *
 */
public class MyJavaIODemo020 {
	public static void main(String[] args) throws FileNotFoundException
	{
		//打印流 System.out
		PrintStream ps = System.out;
		ps.println("打印流");
		ps.println(5);
		//写入文件信息
		ps = new PrintStream(new BufferedOutputStream(new FileOutputStream("print.txt")),true);		//加入true后实现自动刷新
		ps.println(false);
		ps.println("abc");
		ps.println("xyz");
		ps.close();
		//重定向到文件
		System.setOut(ps);
		System.out.println("change");	
		System.out.println("now");
	}
}

2.随机流 RandomAccessFile 实现文件切割和文件复制

文件切割

package cn.io.java.mhz;

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

/**
 * 随机读取和写入流  RandomAccessFile
 * IO文件分割
 * @author MHZ
 *
 */
public class MyJavaIODemo021 {
	public static void main(String[] args) throws IOException
	{
		//分多少块
		File src = new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\codeCopy.txt");
		//总长度
		long len = src.length();
		System.out.println(len);
		//每块大小
		int blockSize = 1024;
		//多少块
		int size = (int)Math.ceil(len*1.0/blockSize);
		System.out.println(size);
		int beginpos = 0;			//起始位置
		RandomAccessFile raf = new RandomAccessFile(src,"r");
		raf.seek(beginpos);
		byte[] str = new byte[blockSize];
		int len1 = raf.read(str,0,str.length);
		while(len1!=-1)
		{
			if(blockSize<=len1) {
				System.out.println(new String(str,0,blockSize));
				beginpos+=blockSize;
				raf.seek(beginpos);
			}
			else {
				System.out.println(new String(str,0,len1));
				break;
			}
			len1 = raf.read(str,0,str.length);
		}
		raf.close();
		//test2();
	}
	
	//指定起始位置,未指定终点位置
	public static void test1() throws IOException{
		//随机流
		RandomAccessFile raf = new RandomAccessFile(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\src\\cn\\io\\java\\mhz\\MyJavaIODemo003.java"),"r");
		//随机读取, 从文件的2号位置开始读取
		raf.seek(2);
		//分段读取
		byte[] flush = new byte[1024];
		int len = raf.read(flush,0,flush.length);
		while(len!=-1)
		{
			String s = new	String(flush,0,len);
			System.out.println(s);
			len = raf.read(flush,0,flush.length);
		}
		raf.close();
	}
	
	//指定了需要切割的文件长度,实现了文件切割,指定了文件需要切割的起始位置以及切割的长度
	public static void test2() throws IOException
	{
		//随机流
				File src = new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\src\\cn\\io\\java\\mhz\\MyJavaIODemo003.java");
				RandomAccessFile raf = new RandomAccessFile(src,"r");
				//System.out.println(src.length());
				//起始位置
				int beginpos = 2;
				//实际大小
				int actualSize = 1026;
				//随机读取
				raf.seek(beginpos);
				//操作读取
				byte[] flush = new byte[1024];
				int len = raf.read(flush,0,flush.length);
				while(len!=-1)
				{
					//System.out.println(len);
					if(actualSize>len)
					{
						actualSize-=len;
						System.out.println(new String(flush,0,len));
						
					}else {
						System.out.println(new String(flush,0,actualSize));
						break;
					}
					len = raf.read(flush,0,flush.length);
				}
				raf.close();
	}
}

文件复制

package cn.io.java.mhz;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 文件分割最终版     面向对象进行文件分割最终版
 * @author MHZ
 *
 */
public class MyJavaIODemo022 {
	public static void main(String[] args) throws IOException
	{
				//分多少块
				File src = new File("bg.jpg");
				//总长度
				long len = src.length();
				System.out.println(len);
				//每块大小
				int blockSize = 1024;
				//多少块
				int size = (int)Math.ceil(len*1.0/blockSize);
				System.out.println(size);
				int beginpos = 0;			//起始位置
				
				//两个随机流,实现了文本的复制
				RandomAccessFile raf = new RandomAccessFile(src,"r");
				RandomAccessFile raf1 = new RandomAccessFile(new File("bg3.jpg"),"rw");
				
				raf.seek(beginpos);
				byte[] str = new byte[blockSize];
				int len1 = raf.read(str,0,str.length);
				while(len1!=-1)
				{
					if(blockSize<=len1) {
						System.out.println(new String(str,0,blockSize));			//图片会出现乱码
						raf1.write(str,0,blockSize);
						beginpos+=blockSize;
						raf.seek(beginpos);
					}
					else {
						System.out.println(new String(str,0,len1));
						raf1.write(str,0,len1);
						break;
					}
					len1 = raf.read(str,0,str.length);
				}
				raf.close();
				raf1.close();
	}
}

3.Java                 CommonsIO  常用核心操作

package cn.io.java.mhz;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.EmptyFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.SuffixFileFilter;

/**
 *
 * CommonsIO  常用核心操作
 * @author MHZ
 *
 */
public class MyJavaIODemo023 {
	public static void main(String[] args) throws IOException
	{
		//文件大小
		long len = FileUtils.sizeOf(new File("C:/Users/asus/eclipse-workspace/Java-IO/src/cn/io/java/mhz/MyJavaIODemo023.java"));
		System.out.println(len);
		//文件目录
		len = FileUtils.sizeOf(new File("D:/BaiduNetdisk"));
		System.out.println(len);
		//列出子孙级
		//返回目录的容器
		//默认情况下,是向下走一层
		//第一个参数指向数据源,第二个参数是过滤器,过滤掉空的文件,第三个参数是指当前不处理空文件
		Collection<File>files = FileUtils.listFiles(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\src\\cn\\io\\java\\mhz"), EmptyFileFilter.NOT_EMPTY, null);		
		for(File file:files)
		{
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("--------------------------------------------------");
		
		
		//处理子孙级
		files = FileUtils.listFiles(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO"), EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);		
		for(File file:files)
		{
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("--------------------------------------------------");
		
		//文件的过滤
		//过滤后缀名
		files = FileUtils.listFiles(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO"), new SuffixFileFilter("java"), DirectoryFileFilter.INSTANCE);	
		for(File file:files)
		{
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("--------------------------------------------------");
		
		//另一种形式的过滤
		files = FileUtils.listFiles(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO"),FileFilterUtils.or( new SuffixFileFilter("java"),new SuffixFileFilter("class")), DirectoryFileFilter.INSTANCE);	
		for(File file:files)
		{
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("--------------------------------------------------");
		
		//再加上空文件
		files = FileUtils.listFiles(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO"), FileFilterUtils.or( new SuffixFileFilter("java"),new SuffixFileFilter("class"),EmptyFileFilter.EMPTY) , DirectoryFileFilter.INSTANCE);	
		for(File file:files)
		{
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("--------------------------------------------------");
		System.out.println("-----------------------------------------------");
		System.out.println("-----------------------------------------------");
		
		
		//文件读取
		//使用这种方法java不推荐使用,需要指定字符集
		String msg = FileUtils.readFileToString(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\dest.txt"),"gbk");
		System.out.println(msg);
		System.out.println("-----------------------------------------------");
		//字节读取
		byte[] datas = FileUtils.readFileToByteArray(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\dest.txt"));
		System.out.println(datas.length);
		System.out.println("-----------------------------------------------");
		//逐行读取
		List<String> msgs = FileUtils.readLines(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\dest.txt"),"gbk");
		for(String str:msgs)
		{
			System.out.println(str);
		}
		System.out.println("-----------------------------------------------");
		//使用迭代器
		LineIterator it = FileUtils.lineIterator(new File("C:\\Users\\asus\\eclipse-workspace\\Java-IO\\dest.txt"), "gbk");
		while(it.hasNext())
		{
			System.out.println(it.nextLine());
		}
		System.out.println("-----------------------------------------------");
		System.out.println("-----------------------------------------------");
		System.out.println("-----------------------------------------------");
		
		
		//文件写出
		//参数最后一位代表是否向后追加
		FileUtils.write(new File("happy.txt"), "学习使我快乐 \r\n","gbk");
		FileUtils.writeStringToFile(new File("happy.txt"), "学习使我秃头 \r\n","gbk",true);
		FileUtils.writeByteArrayToFile(new File("happy.txt"), "学习使人沸腾\r\n".getBytes("gbk"),true);
		
		//写出列表
		List<String> data = new ArrayList<String>();
		data.add("马云");
		data.add("马化腾");
		data.add("李彦宏");
		
		//最后一个参数表示是否向后添加,第三个参数表示两个数据之间的链接符
		FileUtils.writeLines(new File("happy.txt"),	data, "..." , false);
	}
}

文件拷贝

package cn.io.java.mhz;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

/**
 * CommonsIO  文件拷贝  重点掌握
 * @author MHZ
 *
 */
public class MyJavaIODemo024 {
	public static void main(String[] args) throws IOException
	{
		//复制文件
		FileUtils.copyFile(new File("happy.txt"), new File("goodbye.txt"));
		
		//复制文件到目录
		FileUtils.copyFileToDirectory(new File("happy.txt"), new File("D:\\迅雷下载"));
		
		//复制目录到目录,作为子目录
		FileUtils.copyDirectoryToDirectory(new File("commons-lib"), new File("lib2"));
		
		//复制此目录下的内容到另一个目录
		FileUtils.copyDirectory(new File("commons-lib"), new File("lib3"));
		
		//拷贝URL内容
		String url = new String("http://www.baidu.com");
		FileUtils.copyURLToFile(new URL(url), new File("bg4.html"));
		
		String str = IOUtils.toString(new URL("http://www.baidu.com"),"UTF-8");
		System.out.println(str);
		
		System.out.println("------------------------------------------");
		
		String str1 = IOUtils.toString(new URL("http://www.163.com"),"gbk");
		System.out.println(str1);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值