您的位置:首页 > 其它

IO流(2)

2015-08-27 16:37 441 查看

一、File类

1、定义:来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作,File对象可以作为参数传递给流的构造函数。
2、File类的常见方法:
(1)、创建

boolean creatNewFile();在指定位置创建文件,如果该文件已经存在,则不创建,返回false。

static File createTempFile(String prefix,String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。

static File createTempFile(String prefix,String suffix,File directory)在指定文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。和输出流不一样,输出流对象一建立创建文件,而且文件已经存在,会覆盖

boolean mkdir();创建文件夹

boolean mkdirs();创建多级文件夹

(2)、删除

boolean delete():删除失败返回false

void deleteOnExit();在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。在程序退出时删除指定文件

(3)、判断

boolean compareTo(File pathname)按字母顺序比较两个抽象路径名。

boolean exists():文件是否存在

isfile();测试此抽象路径名表示的文件是否是一个标准文件。

isDirectory();测试此抽象路径名表示的文件是否是一个目录

isHidden();/测试此文件是否是一个隐藏文件。

isAbsolute();测试此抽象路径名是否为绝对路径名。

(4)、获取信息

getName();获取名称

getPath()将此抽象路径名转换为一个路径名字符串。

getParent();返回此抽象路径名父目录的路径名字符串,如果此路径名没有指定父目录,则返回null.

getParentFile()返回此抽象路径名父目录的抽象路径名,如果此路径名没有指定父目录,则返回null.

getAbsolutePath();返回的是绝对路径名字符串

getAbsoluteFile();返回绝对路径名形式

long length()返回由此抽象路径名表示的文件的长度。

long lastModified() 返回最后一次被修改的时间。

代码演示:
import java.io.*;
public class FileDemo {
public static void main(String[] args) throws IOException
{   method_2();
method_1();
consMethod();
}
public static void method_5()throws IOException
{
File f=new File("c:\\text.java");
File f1=new File("d:\\haha.java");
System.out.println("rename:"+f.renameTo(f1));//将f的名称换成f1的。
}
public static void method_4()throws IOException
{
File f=new File("d:\\abc\\file1.txt");
System.out.println("path:"+f.getPath());//封装什么就是什么
System.out.println("abspath"+f.getAbsolutePath());//不论是什么都是绝对的。
System.out.println("parent"+f.getParent());//该方法返回的是绝对路径中的父目录,如果获取的是相当路径,返回的是null
//如果相对路径中有上一层目录,那么该目录返回结果。
}

public static void method_3() throws IOException
{
File f=new File("file.txt");
//f.createNewFile();结果是文件是真,目录是假
f.mkdir();//结果是目录是真,文件是假。
//记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在
//通过exists判断
System.out.println("dir:"+f.isDirectory());
System.out.println("file:"+f.isFile());
System.out.println(f.isAbsolute());//绝对路径的判断
}
public static void method_2()
{
File f=new File("file.txt");
//System.out.println("exists:"+f.exists());
//创建文件夹
File dir=new File("abc\\kkk");
System.out.println("mkdir:"+dir.mkdir());
//System.out.println("execute"+f.canExecute());测试应用程序是否可以执行此抽象路径名表示的文件。
}
public static void method_1() throws IOException
{
File f=new File("file.txt");
f.deleteOnExit();
//code();
System.out.println("creat:"+f.createNewFile());
System.out.println("delete:"+f.delete());

}

//创建File对象
public static void consMethod()
{
//将a.txt封装File对象,可以将已有的和未出现的文件或者文件夹封装成对象
File f1=new File("a.txt");
//
File f2=new File("c:\\abc"/*指定的父目录*/,"b.txt");
File d=new File("c:\\abc");/*封装目录*/
File f3=new File(d,"c.txt");
System.out.println("f1:"+f1);
System.out.println("f2:"+f2);
System.out.println("f3:"+f3);
File f4=new File("c:"+File.separator/*\\目录分隔符*/+"abc\\zzz\\a.txt");
}
}

二、递归

1、定义:当函数内每一次循环还可以调用本功能来实现,也就是函数自身调用自身。这种表现形式,或者编程手法,称为递归。

2、递归注意事项

(1)、限定条件。是来结束循环调用,否则是死循环。

(2)、注意递归的次数,尽量避免内存溢出。因为每次调用自身的时候都会先执行下一次调用自己的方法,所以会不断在栈内存中开辟新空间,次数过多,会导致内存溢出。
3、案例:删除一个带内容的目录
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
//指定目录
File dir=new File("e:\\1");
//删除目录
removeDir(dir);

}

//删除传入目录
public static void removeDir(File dir)
{
File[] files=dir.listFiles();//列出目录下的所以文件和文件夹
//遍历
for (File file : files )
{
//如果还是目录且非隐藏
if(!file.isHidden()&&file.isDirectory())
removeDir(file);//继续删除目录里的内容
else
System.out.println(file.toString()+":-file-:"+file.delete());//删除文件
}
System.out.println(dir+":::dir:::"+dir.delete());//删除目录
}
}

三、打印流

1、打印流包括:PrintStream和PrintWriter。该流提供了打印方法,可将各种类型的数据都原样打印。
2、字节打印流:PrintStream,其构造方法中可接收的参数类型:

(1)、File对象。File

(2)、字符串路径:String

(3)、字符输出流:OutputStream

3、字符串打印流:PrintWriter,其构造方法中可接受的参数类型:

(1)、File对象:File

(2)、字符串路径:String

(3)、字节输出流:OutputStream

(4)、字符输出流:Writer
4、案例:把键盘输入的数据保存到文件中
import java.io.*;

class  PrintStreamDemo
{
public static void main(String[] args) throws IOException
{
//键盘录入
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));

//打印流关联文件,自动刷新
PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);

String line = null;

while((line=bufr.readLine())!=null)
{
if("over".equals(line))//结束字符
break;
out.println(line.toUpperCase());
//out.flush();
}

//关流
out.close();
bufr.close();

}
}

四、小结

对于我来说,IO流算是java中比较难的部分。所有的类大部分都是成对出现的,字符流能完成的功能字节流全部都能完成,基本的操作方法基本一致。File类对文件的操作不会创建文件,流对文件的操作都会创建文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: