I/O操作总结
常用的文件操作类关系图
//文件操作类
package com.yupeng.iotest;
import java.io.File;
import java.io.IOException;
import org.junit.Test;
public class FileTest {
@Test
public void test(){
File f=new File("D:/Accp/yupeng/aa");
try {
//创建一个空文件,如果有此文件,不创建
if(f.createNewFile()){
System.out.println("创建一个空文件");
}
//创建文件夹(不包括父文件),但是文件不能被创建成文件过
if(f.mkdir()){
System.out.println("创建一个文件夹!");
}
//创建一个文件夹(包括父文件夹)
if(f.mkdirs()){
System.out.println("创建一个包括父文件夹的文件夹!");
}
//删除一个空文件或文件夹
f.delete();
//判断文件或文件夹是否存在
if(f.exists()){
System.out.println("文件存在!");
}
//判断文件是否是文件夹
if(f.isDirectory()){
System.out.println("文件是一个文件夹!");
}
//判断文件是否是一个标准文件
if(f.isFile()){
System.out.println("这是一个标准文件");
}
//返回文件大小,返回文件实际占了几个字节,结果为0
System.out.println(f.length());
//返回此抽象路径名的绝对路径名字的字符串,结果为:D:\Accp\yupeng.txt
System.out.println(f.getAbsolutePath());
//返回文件名,结果为:yupeng.txt
System.out.println(f.getName());
//返回父路径,结果为:D:\Accp
System.out.println(f.getParent());
//返回完整路径,结果为:D:\Accp\yupeng.txt
System.out.println(f.getPath());
//返回此文件夹下的所有文件,如果不是文件夹则返回空!
File[] files=f.listFiles();
if(files!=null){
for(File ff:files){
System.out.println(ff.getName());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//字节流操纵数据(字节文件:一般文件都可以成为字节文件,例如:文档、图片、音乐……)
package com.yupeng.iotest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.junit.Test;
public class ByteStreamTest {
@Test
public void inByteStreamTest(){
//字节文件输入流
InputStream fis=null;
try {
fis=new FileInputStream("D:/Accp/yupeng.txt");
//作为内存的缓冲字节流池
byte[] bytes=new byte[1024];
//记录实际读取的字节数
int n=0;
//每1024字节读取数据
while((n=fis.read(bytes)) != -1){
String s=new String(bytes,0,n);
System.out.println(s);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fis!=null){
try {
//关闭字节输入流
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
@Test
public void outByteStreamTest(){
//字符文件输出流
OutputStream fos=null;
try {
fos=new FileOutputStream("D:/Accp/yupeng.txt");
//要写到文件中的字节数据
String s="于鹏yupeng123456";
//注意:它会覆盖原有文件中的数据写入
fos.write(s.getBytes());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
//字符流操纵数据(只能是字符类型数据)
package com.yupeng.iotest;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import org.junit.Test;
public class CharStreamTest {
@Test
public void inAndOutCharStreamTest(){
//字符文件输入流
Reader fr=null;
//字符文件输出流
Writer fw=null;
try {
fr=new FileReader("D:/Accp/yupeng.txt");
fw=new FileWriter("D:/Accp/new.txt");
//1024个字符文件缓冲池,大小:2k
char[] chars=new char[1024];
//记录每次实际读取的字符数
int n=0;
//读取文件
while((n=fr.read(chars))!=-1){
String s=new String(chars,0,n);
System.out.println("字符为"+s);
System.out.println("数字:"+n);
//写入到新文件
fw.write(chars,0,n);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
//关闭字符流文件
if(fr!=null){
fr.close();
}
if(fw!=null){
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//字符串形式传输数据(比字符流要快,文件类型只能为字符型数据)
package com.yupeng.iotest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import org.junit.Test;
public class StringStreamTest {
@Test
public void inAndOutStringStreamTest(){
Reader fr=null;
Writer fw=null;
//带缓冲的字符流操作数据类
BufferedReader br=null;
BufferedWriter bw=null;
try {
fr=new FileReader("D:/Accp/yupeng.txt");
fw=new FileWriter("D:/Accp/new.txt");
//因为BuffedReader、BufferedWriter的构造函数中参数只能 是Reader、Writer类型的数据
br=new BufferedReader(fr);
bw=new BufferedWriter(fw);
String s="";
//readLine()读取不带换行符的一整行数据,当读到不包含任何行的终止符时返回null
while((s=br.readLine())!=null){
s=s+"\r\n";
bw.write(s);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
bw.close();
br.close();
fr.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
第二篇:java IO 文件操作
java IO 文件操作
/*
java 文件操作
java中文件操作的类是 File类 可以实现对文件的创建删除 修改等
File类 在 java.io包中
下面是 通过 java.io.File类实现对文件操作
File类没有提供对文件的读写方法
*/
import java.io.*; //导入io包
class Test
{
public static void main(String []args) throws Exception //直接吧所有异常抛出给 JVM虚拟机
{
//一个File类对象代表一个文件或者目录
//File.seperator 表示 当前盘符与系统相关的抽象目录 或者一个\ /
File dir=new File(File.separator +"newDir"); //在当前路径下创建一个目录 dir.mkdir(); //创建目录
File file1=new File(dir,"1.txt"); //在 newDir目录下创建1.txt这是 构造函数的重载形式 dir是父目录
file1.createNewFile() ;//在dir目录下创建一个新文件
File file2=new File("d:\\2.txt"); //直接用绝对路径创建
file2.createNewFile(); //创建文件
/*在运行的时候生成文件在推出的时候删除文件*/
/*File fRun=new File("d:\\fRun.txt");
fRun.createNewFile() ; //create
fRun.deleteOnExit() ;//这个文件会在程序推出的时候删除掉
Thread.sleep(3000);
*/
/* java创建临时文件 并且删除临时文件 */
int count =0;
while(count++<10)
{
File ftemp=File.createTempFile("xiaowei",".tmp") ; //创建临时文件 File类静态方法
ftemp.deleteOnExit();//在退出程序的时候删除临时文件
//临时文件目录在 系统变量的temp
}
/*
查看一个目录下所有文件个目录 并且进行过滤
*/
File fileter=new File(File.separator); //代表当前目录 我是D盘
String []name=fileter.list();//获得当前目录下的多有文件目录名字
System.out.println("未加滤镜");
for(int i=0;i<name.length;i++)
System.out.println(name[i]);
System.out.println("\n\n加滤后");
String []fname=fileter.list(new FilenameFilter() //这里传递的是一个匿名的内部类因为接口不能直接实例对象
{
public boolean accept(File dir, String name)
{
return name.indexOf("txt")!=-1;//不是txt返回 false 是txt返回 true }
}
) ;//通过滤镜获得文件目录名 传递一个 FilenameFilter接口实现对象 这里是匿名
for(int i=0;i<fname.length;i++)
System.out.println(fname[i]);
} }