输入流(读):外围数据读到内存,硬盘数据读到内存中
输出流:写
文件输出
FileOutput.java
package cn.itcast.bytestream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutPut {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
/*
* 数据写入到文件
* 使用字节输出流
* FileOutputStream
*/
//创建字节输出流对象 ,用于操作文件,初始化时
//必须明确数据存储目的地
File dir =new File("tempfile");
if(!(dir.exists())){
dir.mkdir();
}
//输出流所关联的止的地,如果不存在会自动创建,如果存在会覆盖
FileOutputStream fos=new FileOutputStream("tempfile\\fos.txt");
//调用输出流写功能
String str="abcde";
byte[] buf=str.getBytes();
fos.write(buf);
//释放资源
fos.close();
}
}
异常标准步骤
IOException.java
package cn.itcast.bytestream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class IOException {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileOutputStream fos =null;
try {
fos =new FileOutputStream("u:\\tempfile\\fos.txt");
fos.write("abcdeee".getBytes());
} catch (java.io.IOException e) {
// TODO Auto-generated catch block
System.out.println(e.toString()+"llll");
}finally{
//不加会报空指针异常,必须判断
if(fos!=null){
try {
fos.close();
} catch (java.io.IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("fialsledes"+e);
}
}
}
}
}
获取某个目录下所有文件
package cn.itcast.bytestream;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
import cn.itcast.filter.FileFilterBySuffix;
public class Test {
//获取某个目录下所有java文件
public static void main(String[] args) {
/*
* 思路:
* 1.递归包含子目录
* 2.过滤器
* 3.满足的加到集合中
*/
File dir =new File("D:\\code");
List<File> list =fileList(dir,".java");
for(File file:list){
System.out.println(file);
}
}
public static List<File> fileList(File dir,String suffix){
//定义集合
List<File> list =new ArrayList<File>();
//定义过滤器
FileFilter filter =new FileFilterBySuffix(suffix);
getFileList(dir,list ,filter);
return list;
}
/**
*
* 多级目录下都要用到相同的集合和过滤器,不要在递归方法中定义,而是应该不断传递
*
* 获取指定过滤器条件文件集合
* @param dir 需要遍历的目录
* @param list 用于存储符合条件的对象
* @param filter 接受指定的过滤器
*/
public static void getFileList(File dir,List<File> list,FileFilter filter){
//通过listFiles方法获取dir当前下所有
File[] files =dir.listFiles();
//遍历访数组
for(File file:files){
if(file.isDirectory()){
getFileList(file, list, filter);
}else{
//通过过滤器进行过滤
if(filter.accept(file)){
list.add(file);
}
}
}
}
}
---------------------- 文件读取1
FileInput.java
package cn.itcast.file.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
/*
* 将已经有文件读取出来
* 读所以用InputStream
*
*/
//为确保文件 在读之前存在的
File file =new File("tempfile\\fos.txt");
if(!file.exists()){
throw new RuntimeException("not exist");
}
//创建文件字节流读取对象时,必须明确与之关联数据源
FileInputStream fis =new FileInputStream(file);
//调用读取方法,读取一个字节
int by=0;
while((by=fis.read())!=-1){
System.out.println(by);
}
//关闭资源
fis.close();
}
}
---------------------- 文件读取2
常用方式这个是
FileInputStream2.java
package cn.itcast.file.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamDemo2 {
public static void main(String[] args) {
File dir =new File("tempfile\\fos.txt");
if(!dir.exists()){
throw new RuntimeException("asd");
}
FileInputStream fis =null;
try{
fis =new FileInputStream(dir);
byte[] buf =new byte[2];
int len =0;
while((len=fis.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
/*//调用 read(byte[])方法
byte[] buf =new byte[2];
//字节数组里存储字节个数
int len=fis.read(buf);
//字节数组转成字符串打印
System.out.println(len+"..."+new String(buf,0,len));
int len2=fis.read(buf);
//字节数组转成字符串打印
System.out.println(len2+"..."+new String(buf,0,len2));
*/
}catch(IOException e){
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
//一般RuntimeExceiption或者写到日志文件中
// TODO Auto-generated catch block
}
}
}
}
}
dsfsd