File类
用来将文件或者文件夹封装成对象。
方便对文件与文件夹的属性信息进行操作 。
File对象可以作为参数传递给流的构造函数。
File类常见方法:
1.创建:
boolean createNewFile():
在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdirs():创建多级文件夹。
2.删除:
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。
3.判断:
boolean exists() :文件是否存在.
isFile():是否是文件
isDirectory();是否是目录
isHidden();是否隐藏
4.获取信息:
getName():获取名称
getPath():获取路径
getAbsolutePath() ;获取绝对路径
long lastModified() ;获取最后修改时间
long length() ;获取体积大小
5.其他:
renameTo();改名,重命名,如果修改路径的话,同时路径也会修改
listRoots();返回 File 数组,列出可用的文件系统根(盘符)
list():返回当前目录下所有文件,包括子目录
listFiles();返回当前路径下的文件对象。(不包括子目录)
示例代码:显示.bmp结尾的文件
File dir=new File("abc");
String[] namess=f.list(new FilenameFileter()
public boolean accept(File dir,String name)
{
return name.endsWith(".bmp");
}
);
for(String f: names)
{
sop(f);
}
递归
函数自己调用自己。
注意:递归时一定要明确结束条件。
应用场景:当某一功能要重复使用时。
递归要注意:
1.限定条件。
2.要注意递归的次数。尽量避免内存溢出。
示例代码:列出指定目录下文件或者文件夹,包含子目录中的内容。
import java.io.*;
class FileDemo
{
public static void main(String[] args)
{
File dir = new File("d:\\testdir");
showDir(dir,0); }
public static String getLevel(int level)
{
StringBuilder sb = new StringBuilder();
sb.append("|--");
for(int x=0; x<level; x++)
{ sb.insert(0,"| ");
}
return sb.toString();
}
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]);
}
}
}
代码:删除一个带内容的目录。
删除原理:
在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文件列表文件。(将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。)
思路:1.对指定的目录进行递归。
2.获取递归过程所以的java文件的路径。
3.将这些路径存储到集合中。
4.将集合中的数据写入到一个文件中。
import java.io.*;
import java.util.*;
class JavaFileList
{
public static void main(String[] args) throws IOException
{
File dir = new File("d:\\javatest");
List<File> list = new ArrayList<File>();
fileToList(dir,list);
File file = new File(dir,"javalist.txt");
writeToFile(list,file.toString());
}
public static void fileToList(File dir,List<File> list)
{
File[] files = dir.listFiles();
for(File file : files)
{
if(file.isDirectory())
fileToList(file,list);
else
{
if(file.getName().endsWith(".java"))
list.add(file);
}
}
}
public static void writeToFile(List<File> list,String javaListFile)throws IOException
{
BufferedWriter bufw = new BufferedWriter(new FileWriter(javaListFile));
for(File f : list)
{
String path = f.getAbsolutePath();
bufw.write(path);
bufw.newLine();
bufw.flush();
} bufw.close();
}
}
类Properties
Properties是hashtable的子类。
也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值。
代码:限制程序运行次数。当运行次数到达5次时,给出,请您注册的提示。并不再让该程序执行。
import java.io.*;
import java.util.*;
class RunCount
{
public static void main(String[] args) throws IOException
{
Properties prop = new Properties();
File file = new File("count.ini");
if(!file.exists())
file.createNewFile();
FileInputStream fis = new FileInputStream(file);
prop.load(fis);
int count = 0;
String value = prop.getProperty("time");
if(value!=null)
{
count = Integer.parseInt(value);
if(count>=5)
{
System.out.println("再次使用请注册!");
return ;
}
}
count++;
prop.setProperty("time",count+"");
FileOutputStream fos = new FileOutputStream(file);
prop.store(fos,"");
fos.close();
fis.close();
}
}
打印流
该流提供了打印方法,可以将各种数据类型的数据都原样打印。
字节打印流:PrintStream
构造函数可以接收的参数类型:
1.file对象。File
2.字符串路径。String
3.字节输出流。OutputStream
字符打印流:PrintWriter
构造函数可以接收的参数类型:
1.file对象。File
2.字符串路径。String
3.字节输出流。OutputStream
4.字符输出流,Writer。
示例代码:
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.close();
bufr.close();
}
}