java基础--IO流之File类

java

一、File类概述

用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作,File对象可以作为参数传递给流的构造函数

二、File类常见方法:

1,创建

boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返false,  和输出流不一样,

输出流对象一建立创建文件,而且文件已经存在,会覆盖。

boolean mkdir():创建文件夹。

boolean mkdirs():创建多级文件夹。

2,删除

boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。

void deleteOnExit();在程序退出时删除指定文件。

3,判断

boolean exists() :文件是否存在.记住在判断文件对象是否是文件或者路径时,

   必须要先判断该文件对象封装的内容是否存在。

isFile(): isDirectory();isHidden();isAbsolute();

4,获取信息

getName():  getPath():     getAbsolutePath()   long lastModified()   long length()

getParent():该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。七


File常见方法演示代码

package cn.xushuai.io;

import java.io.*;

class FileDemo {

public static void main(String[] args) throws IOException{

method_1();

//method_5();

}

public static void method_1()throws IOException{

File f = new File("file.txt");

// sop("create:"+f.createNewFile());//创建文件,如果已存在,则不再创建

//sop("delete:"+f.delete()); //删除文件

}

public static void method_2(){

File f = new File("file.txt");

//sop("exists:"+f.exists());

//sop("execute:"+f.canExecute());

//创建多级文件夹

File dir = new File("abc\\kkk\\a\\a\\dd\\ee\\qq\\aaa");

sop("mkdir:"+dir.mkdirs());

}

public static void method_3()throws IOException{

File f = new File("d:\\java1223\\day20\\file2.txt");

//f.createNewFile();

//f.mkdir();

//记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。

//通过exists判断。

sop("dir:"+f.isDirectory());

sop("file:"+f.isFile());

sop(f.isAbsolute());//文件不存在。也可以

}

public static void method_4(){

File f = new File("file.txt");

sop("path:"+f.getPath());//返回所封装的路劲

sop("abspath:"+f.getAbsolutePath()); //获取绝对路径,即使是相对的路径也可以

sop("parent:"+f.getParent());//该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。

//如果相对路径中有上一层目录,那么该目录就是返回结果。

}

public static void method_5(){

File f1 = new File("c:\\Test.java");

File f2 = new File("d:\\hahah.java");

sop("rename:"+f2.renameTo(f1));//重新命名此抽象路径名表示的文件

}

public static void sop(Object obj){

System.out.println(obj);

}

}



File练习


练习一:获取文件列表:

package cn.xushuai.io;

import java.io.File;

import java.io.FilenameFilter;

import java.util.Iterator;

public class FileDemo2 {

public static void main(String[] args) {

// TODO Auto-generated method stub

//listRootsDemo();

listFileDemo();

//listDemo();

//listFilterDemo();

}

//列出可用的文件系统根

public static void listRootsDemo(){

File[] files = File.listRoots();

for (File file : files) {

System.out.print(file);

}

}

//返回一个文件对象数组

public static void listFileDemo(){

File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\day20");

File[] files = file.listFiles();

for(File f : files){

System.out.println(f+"...."+f.getName()+"....."+f.length());

}

}

public static void listDemo(){

File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\day20");

//返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录

String[] names = file.list(); //调用list方法的file对象必须是封装了一个目录。该目录还必须存在

for(String name: names){

System.out.println(name);

}

}

//获取指定文件类型的文件

public static void listFilterDemo(){

File dir = new File("D:\\Java\\java课程\\毕向东\\Java基础\\Java基础源代码\\day14");

String[] names = dir.list(new FilenameFilter(){

public boolean accept(File dir,String name){

//System.out.println("dir:"+dir+"....name::"+name);

/*if(name.endsWith(".java"))

return true;

else

return false;*/

return name.endsWith(".java");

}

});

for(String name : names){

System.out.println(name);

}

}

}



练习二:列出指定目录下文件或者文件夹,包含子目录中的内容


示例说明:

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。

在列出过程中出现的还是目录的话,还可以再次调用本功能。

也就是函数自身调用自身。

这种表现形式,或者编程手法,称为递归。


递归注意事项:

1,限定条件

2,要注意递归的次数。尽量避免内存溢出。

由于在没有符合限定条件时,每次调用都会开辟一个新的内存空间由于存放方法,

但是这些内存都不能释放。只有符合限定条件,才能一步步往回执行,占用大量内存


package cn.xushuai.io;

import java.io.File;

public class FileDemo3 {

public static void main(String[] args) {

// TODO Auto-generated method stub

File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\Java基础源代码");

//showDir(file);

System.out.println(getSum(10));

showDir(file,0);

}

//通过递归列出某个文件夹下的所有内容

public static void showDir(File dir,int level){

System.out.println(getLevel(level)+"...."+dir.getName());

level++;

File[] files = dir.listFiles();

for(int x=0;x<files.length;x++){

if(files[x].isDirectory())

showDir(files[x],level);

else

System.out.println(getLevel(level)+files[x].getName()+"....");

}

}

//在列表前添加级数

public static String getLevel(int level){

StringBuilder sb = new StringBuilder();

sb.append("|--");

for(int i=0;i<level;i++){

sb.insert(0,"| ");

}

return sb.toString();

}


练习三:将一个指定路径下的文件列表写入到一个本地文件中

 这里将指定路径下的所有文件对象先存储到集合中去,然后将集合中的对象写入到本地文件:对象的持久化

存入集合是为了可以有更多的操作选择,打印,写入都可。

思路:

1,对指定的目录进行递归。

2,获取递归过程所以的java文件的路径。

3,将这些路径存储到集合中。

4,将集合中的数据写入到一个文件中。


package cn.xushuai.io;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

public class JavaFileList {

public static void main(String[] args) {

List<File> list = new ArrayList<File>();

File file = new File("D:\\Java\\java课程\\毕向东\\Java基础\\Java基础源代码\\day20");

File file2 = new File("c:\\javalist2.txt");

list = file2List(list,file);

try {

write2File(list,file2.toString());

} catch (IOException e) {

System.out.println("写入失败!");

}

}

//将文件内容存入集合

public static List file2List(List list,File dir){

File[] files = dir.listFiles();

for(int x=0;x<files.length;x++){

if(files[x].isDirectory())

file2List(list,files[x]);

else{

if(files[x].getName().endsWith(".java"))

list.add(files[x]);

}

}

return list;

}

//将集合中的内容存入文件

public static void write2File(List<File> list,String fileName)throws IOException{

BufferedWriter bufr = null;

try {

bufr = new BufferedWriter(new FileWriter(fileName));

for(File f : list){

String path = f.getAbsolutePath();

bufr.write(path);

//bufr.write(f.toString());

bufr.newLine();

bufr.flush();

}

} catch (IOException e) {

throw e;

}finally{

if(bufr!=null)

try {

bufr.close();

} catch (IOException e) {

throw e;

}

}

}

}


练习四、删除带内容的目录


删除原理:

在window中,删除目录从里面往外删除的

既然是从里往外删除。就需要用到递归

import java.io.*;

class RemoveDir{

public static void main(String[] args) {

File dir = new File("d:\\testdir");

removeDir(dir);

}

public static void removeDir(File dir){

File[] files = dir.listFiles();

for(int x=0; x<files.length; x++){

if(files[x].isDirectory())

removeDir(files[x]);

else

System.out.println(files[x].toString()+":-file-:"+files[x].delete());

}

System.out.println(dir+"::dir::"+dir.delete());

}

}


以上是 java基础--IO流之File类 的全部内容, 来源链接: utcz.com/z/395147.html

回到顶部