File类
操作文件和目录的对象。
1.创建与删除
1.1 常用的构造函数:
File(String pathname);
File(File parent,String child);
File(String parent,String child);
1.2 创建
createNewFile(); 返回boolean类型,如果创建成功返回true,如果文件创建失败返回false。
createTempFile(String prefix,String suffix); 在默认临时文件目录下创建临时文件,并指定文件名的前缀和后缀,前缀至少三个字符,后缀可以为null,默认为".tmp"。
createTempFile(String prefix,String suffix,File directory) 在指定目录下创建临时文件。
mkdir() 创建指定的目录。
mkdirs() 创建指定的目录,包括父目录。
1.3 删除
delete() 删除文件或目录,删除成功返回true,失败返回false。
注:目录为空 才能被删除。
deleteOnExit() 退出时删除。 没有返回值。
2.判断
canExecute() 判断该文件是否可执行。
canRead() 判断该文件是否可读。
canWrite() 判断该文件是否可写。
exists() 判断文件是否存在。
isAbsolute() 判断是否为绝对路径。
isDirectory() 判断是否为目录。
isFile() 判断是否为标准文件。
isHidden() 判断是否为隐藏文件。
3.获取
String getName() 获取文件名;
String getAbsolutePath() 获取绝对路径;
String getPath() 获取路径;(我们封装的是什么路径,就获取什么路径)
String getParent() 获取父路径;(我们封装的路径中的文件父路径)
long length() 获取文件的大小。(单位是字节)
long getFreeSpace() 返回指定分区未分配的字节数。
long getTotalSpace() 返回指定分区的总字节数。
long getUsableSpace() 返回指定分区的可用字节数。
4.文件列表
String[ ] list() 返回一个字符串数组,得到指定目录中的所有文件和目录,包括隐藏文件和目录
String[ ] list(FilenameFilter filter) 返回一个字符串数组,得到满足过滤器的所有文件和目录
File[ ] listFiles() 返回一个File对象的数组,得到指定目录中的所有文件和目录,包括隐藏文件和目录
File[ ] listFiles(FilenameFilter filter) 返回一个File对象的数组,得到满足过滤器的所有文件和目录
File[ ] listFiles(FileFilter filter) 返回一个File对象的数组,得到满足过滤器的所有文件和目录
static File [ ] listRoots() 返回File对象的数组,得到系统中的所有的可用盘符。
listRoots例子:
public static void list() { File[] roots = File.listRoots(); for (File root : roots) { System.out.println(root+"\t一共"+root.getTotalSpace()/1024.0/1024.0/1024.0+"\tG." +"\t还有"+root.getFreeSpace()/1024.0/1024.0/1024.0+"\tG.未分配\t还有" +root.getUsableSpace()/1024.0/1024.0/1024.0+"\tG.可用空间"); } }
list例子:
public static void list() { File f = new File("d:"); String[] names = f.list(); for (String name : names) { System.out.println(name); } }
list(FilenameFilter filter) 例子:
public static void listFilter() { File f = new File("d:"); String[] names = f.list(new FilenameFilter() { public boolean accept(File dir, String name) //dir就是我们封装的路径那个文件夹,name就是那个文件夹下的所有文件 { return name.contains("java"); } }); for (String name : names) { System.out.println(name); } }
5.递归
1.递归就是:函数自己调用自己。
2.需要注意的是:
1.递归的条件限定。以免出现死循环。
2.递归的次数,如果次数太多会出现内存溢出。
3.列出D盘下所有的文件。
public static void listD(File f) { File f1 = new File(f.toString()); File[] lists = f1.listFiles(); for (File file : lists) { if(file.isDirectory() && !file.isHidden()) //因为有些隐藏的系统文件我们没有访问权限,如果要遍历它就会报NullPointerException listD(file); else System.out.println(file); } }
如果文件比较多,在eclipse中显示太长,可以搞一个输出流,写道一个文本文件中去。
public static void listD(File f) throws IOException { File f1 = new File(f.toString()); //搞一个输出流,将遍历的文件写入一个txt文本中 BufferedWriter bw = new BufferedWriter(new FileWriter("1.txt",true)); File[] lists = f1.listFiles(); for (File file : lists) { if(file.isDirectory() && !file.isHidden()) listD(file); else { bw.write(file.toString()); bw.newLine(); bw.flush(); } } bw.close(); }
7.Properties
Properties是hashtable的子类,也就是说它具备Map集合的特点。存储的方式都是键值对。但是建和值都是字符串。
特点:可以用于键值对存在的配置文件。
7.1.存取。
setProperties(String key,String value); 存
String getProperties(String key); 取
Set<String> stringPropertyNames() ; 得到所有的Key值
7.2.存取配置文件
load(InputStream in); 从输入流中读取配置信息(使用的是字节流)
load(Reader r); 从输入流中读取配置信息(使用字符流)
简单实现load 方法 原理:
public static void loadYuanLi() { BufferedReader br = null; Map<String,String> map = null; try { br = new BufferedReader(new FileReader("set.ini")); map = new HashMap<String,String>(); String line = null; while((line = br.readLine())!=null) { String[] info = line.split("="); map.put(info[0], info[1]); } System.out.println(map); } catch (IOException e) { e.printStackTrace(); }finally { if(br != null) try { br.close(); } catch (IOException e) { e.printStackTrace(); } } }
将配置信息写入配置文件中
store(InputStream in);
store(Writer out);
8.打印流
8.1.PrintWriter
字符输出流中的一个。它是 Writer 的子类。只是这个类中提供了 print 系列的打印方法。
8.2PrintStream
字节输出流中的一个。它是 OutputStream 的子类FilterOutputStream 的子类。同样只是在这个类中提供了 print 系列的打印方法。
9.合并流
简单实现文件的合并
public static void heBin() throws IOException { //Vector 效率很低,所以用ArrayList ArrayList<FileInputStream> arr = new ArrayList<FileInputStream>(); for(int i=1;i<5;i++) { arr.add(new FileInputStream("d:\\DocumentAPI.part"+i)); } Iterator<FileInputStream> it = arr.iterator(); Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() { public FileInputStream nextElement() { return it.next(); } public boolean hasMoreElements() { return it.hasNext(); } }; SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream fos = new FileOutputStream("d:\\DocumentApi.rar"); byte[] buff = new byte[1024]; int len = 0; while((len=sis.read(buff))!=-1) { fos.write(buff, 0, len); } System.out.println("合并完成..."); sis.close(); fos.close(); }
10.切割文件
实现简单的文件切割
public static void cutE() { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("D:\\Java\\Java手册\\DocumentAPI.rar"); //源文件很小,只有3M多 byte[] buff = new byte[1024*1024];//定义缓冲区为1M int len = 0; int part = 1; while((len=fis.read(buff))!=-1) { fos = new FileOutputStream("d:\\DocumentAPI.part"+(part++)); fos.write(buff,0,len); } System.out.println("切割完成..."); } catch (IOException e) { e.printStackTrace(); }finally { if(fis!=null) try { fis.close(); } catch (IOException e) { e.printStackTrace(); } if(fos!=null) try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }