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);
}
}