明确输入输出来选用流对象:
package javaBase.io.stream;
import java.io.*;
/**IO总结
* 步骤1:明确源和目的
* 源: 输入流 InputStream Reader
* 目的: 输出流 OutputStream Writer
* 步骤2:操作的数据是不是文本
* 文本:字符流 如果要指定编码如UTF-8,只能通过转换流
* 非文本:字节流
* 步骤3:通过设备选取具体对象
* 源:内存、硬盘、键盘
* 目的:内存、硬盘、控制台
* @author xukunn
*
*/
public class IOSummary {
public static void main(String[] args) throws IOException {
// copyText();
copyMedia();
}
/**
* 复制文本文件
*/
public static void copyText() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("man.txt") );
BufferedWriter bw = new BufferedWriter(new FileWriter("man_copy.txt"));
String line = null;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
/**
* 复制非文本文件
*/
public static void copyMedia() throws IOException{
InputStream in = new FileInputStream("man.mp3");
OutputStream out = new FileOutputStream("man_copy.mp3");
byte[] buff = new byte[1024*8];
int len = 0;
while((len =in.read(buff))!=-1){
out.write(buff,0,len);
}
in.close();
out.close();
}
/* 模板:键盘写入硬盘*/
public static void inOut() throws IOException{
//源:键盘
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//目的:硬盘
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("man.txt")));
String line = null;
while((line = br.readLine())!=null){
if("over".equals(line))//结束标记
break;
bw.write(line);
bw.newLine();//换行
bw.flush();//刷缓冲
}
br.close();
bw.close();
}
}
递归输出目录文件
package javaBase.io.others;
import java.io.*;
/*
* 递归注意:
* 1,结束条件
* 2,控制递归次数,因为每一次都开辟一个函数空间,小心栈内存溢出
*/
public class FileShow {
public static void main(String[] args) {
File f = new File("E:\\Admin\\workspace\\itHeima");
showDir(f);
// toBin(6);
}
/*
* 递归显示目录下面的文件,包括目录下的目录
*/
public static void showDir(File file){
System.out.println(file);//打印目录
File[] files = file.listFiles();
for(int i=0;i<files.length;i++){
if(files[i].isDirectory()){
showDir(files[i]);
}else
System.out.println(files[i]);//打印文件
}
}
/*
* 函数递归将一个数转成2进制打印出来
*/
public static void toBin(int i){
if(i>0){
toBin(i/2);
System.out.print(i%2);
}
}
}
将一个路径下的所有java文件的绝对路径存储到一个文件中
package javaBase.io.others;
import java.io.*;
import java.util.*;
/*
* 将一个路径下的所有java文件的绝对路径存储到一个文件中
* 中间用一个list存一下
*/
public class ListJavaFiles {
public static void main(String[] args) throws IOException{
File dir = new File("E:\\Admin\\workspace\\itHeima");
List<File> list = new ArrayList<File>();
fileToList(dir, list);
// System.out.println(list.size());
File file = new File(dir,"list.txt");
listToText(list, file.toString());
}
/*
* 文件写入list集合
*/
public static void fileToList(File file,List<File> list){
File[] files = file.listFiles();
for(File f:files){
if(f.isDirectory())
fileToList(f,list);
else{
if(f.getName().endsWith(".java")){
list.add(f);
}
}
}
}
/*
* 写入文本文件中
*/
public static void listToText(List<File>list,String fileName) throws IOException{
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(fileName));
for(File file:list){
bw.write(file.getAbsolutePath());
bw.newLine();
bw.flush();
}
} catch (IOException e) {
throw e;
}finally{
try {
if(bw!=null){
bw.close();
}
} catch (IOException e) {
throw e;
}
}
}
}