黑马程序员_File类和Properties类

来源:互联网 发布:淘宝货到付款发货流程 编辑:程序博客网 时间:2024/04/29 16:46
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
1.File类在整个IO包中与文件本身有关的操作类,所有的与文件本身有关指的是创建、删除文件等操作。在java.io包中的File类本身是一个跨平台的文件操作类,所以在操作中要更多的考虑到各个操作系统的区别。
File 即指文件也指文件夹。
2.构造方法:
File(String pathname) 
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 
File(String parent, String child) 
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(File parent, String child) 
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
3.方法摘要:
(1)创建:
boolean createNewFile() 
当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 
boolean mkdir() 
创建一级文件夹
boolean mkdirs() 
创建多级文件夹
(2)判断:
boolean canExecute() 
测试应用程序是否可以执行此抽象路径名表示的文件。 
boolean canRead() 
测试应用程序是否可以读取此抽象路径名表示的文件。 
boolean canWrite() 
测试应用程序是否可以修改此抽象路径名表示的文件。
int compareTo(File pathname) 
按字母顺序比较两个抽象路径名。 
boolean isAbsolute() 
测试此抽象路径名是否为绝对路径名。 
boolean isDirectory() 
测试此抽象路径名表示的文件是否是一个目录。 
boolean isFile() 
测试此抽象路径名表示的文件是否是一个标准文件。 
boolean isHidden() 
测试此抽象路径名指定的文件是否是一个隐藏文件。
boolean exists() 
测试此抽象路径名表示的文件或目录是否存在。 
(3)获取:
String getParent() 
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 
File getParentFile() 
返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。 
String getName() 
返回由此抽象路径名表示的文件或目录的名称。
String getPath() 
将此抽象路径名转换为一个路径名字符串。 
String getAbsolutePath() 
返回此抽象路径名的绝对路径名字符串。
File getAbsoluteFile() 
返回此抽象路径名的绝对路径名形式。
(4)删除:
boolean delete() 
删除此抽象路径名表示的文件或目录。 
oid deleteOnExit() 
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 
(5)获取全部:
String[] list() 
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 
String[] list(FilenameFilter filter) 
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 
File[] listFiles() 
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 
File[] listFiles(FileFilter filter) 
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
4.递归:函数自身调用自身,称之为递归。
列出目录所有子目录及文件名称
import java.io.*;  class  FileDemo  {      public static void main(String[] args)throws IOException       {          System.setOut(new PrintStream("list.txt"));          File file = new File("g:\\java");          getFiles(file,0);      }      public static void getFiles(File file,int floor)      {          System.out.println(getDirName(file,floor));          floor++;          File[] files = file.listFiles();          for(File f : files)          {              if(f.isDirectory())                  getFiles(f,floor);              else                  if(f.getName().endsWith(".java"))                      System.out.println(getDirName(f,floor));          }      }      public static String getDirName(File f,int floor)      {          StringBuilder sb = new StringBuilder();          sb.append("|--"+f.getName());          for(int x=0;x<floor;x++)          {              sb.insert(0,"\t");          }          return sb.toString();      }     }  
5.删除带内容的目录:
public static void removeDir(File dir){File[] files = file.listFile();for(int i = 0;i<files.length;i++){if(files[i].isDirectory&&!files[i].isHidden())removeDir(files[i]);//如果是文件夹则继续调用函数else//如果是文件则删除。注意删除的时候打印删除的结果,防止误删或者重删的情况sop(files[i].toString()+"::"+files[i].delete());}sop(dir+"::"+dir.delete());}
6.将制定目录下的java文件的绝对路径存储到文本文件中。
思路:
**对指定目录进行递归
  **获取递归过程中所有java文件的路径
  **将这些路径存储到集合中
  **将集合中的数据写入文件中
 //对指定目录进行递归并将所以Java文件存储到集合中public static void getFileName(File file,ArrayList<File> arraylist){File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {if(files[i].isDirectory()&&!files[i].isHidden()){getFileName(files[i],arraylist);}else{if(files[i].getName().endsWith(".java")){arraylist.add(files[i]);}}}}//将集合中所有数据存储到新文件中public static void saveFileToNewDir(ArrayList<File> arraylist,File newDir){BufferedWriter bufw = null;try {bufw = new BufferedWriter(new FileWriter(newDir));for (File file : arraylist) {String fileAbsolutePath = file.getAbsolutePath();bufw.write(fileAbsolutePath);bufw.newLine();bufw.flush();}} catch (Exception e) {System.out.println("文件写入失败");}finally{try {if(bufw!=null)bufw.close();} catch (Exception e2) {System.out.println("文件写入流关闭失败");}}}
7.Properties类
Properties是hashtable的子类,具备map集合的特点。存储的键值对都是字符串。
是集合和io技术相结合的集合容器。
可以用于键值对形式的配置文件。在加载数据时,需要是键值对形式。
(1)构造方法:
Properties() 
创建一个无默认值的空属性列表。 
Properties(Properties defaults) 
创建一个带有指定默认值的空属性列表。 
(2)方法摘要:
Object setProperty(String key, String value) 
调用 Hashtable 的方法 put。
String getProperty(String key) 
用指定的键在此属性列表中搜索属性。 
void load(InputStream inStream) 
从输入流中读取属性列表(键和元素对)。 
void load(Reader reader) 
按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 
void list(PrintStream out) 
将属性列表输出到指定的输出流。 
void list(PrintWriter out) 
将属性列表输出到指定的输出流。
void store(OutputStream out, String comments) 
以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,
将此 Properties 表中的属性列表(键和元素对)写入输出流。 
void store(Writer writer, String comments) 
以适合使用 load(Reader) 方法的格式,将此 Properties 表中的
属性列表(键和元素对)写入输出字符。 
Set<String> stringPropertyNames() 
返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中
未找到同名的键,则还包括默认属性列表中不同的键
(3)把键值对配置文件存储到Properties集合中:load()方法原理 
限制程序运行次数,当运行次数达5次时,给出付款提示,并不再让程序执行。
mport java.io.*;  import java.util.*;  class RunNumberDemo   {      public static void main(String[] args) throws IOException      {          File file = new File("number.ini");          if(!file.exists())              file.createNewFile();          FileInputStream fis = new FileInputStream(file);          Properties prop = new Properties();              prop.load(fis);          int number = 0;          String value = prop.getProperty("time");          if(value!=null)          {              number = Integer.parseInt(value);              if(number>=5)              {                  System.out.println("次数已到,请付款");                  return;              }          }          number++;          prop.setProperty("time",number+"");                    FileOutputStream fos = new FileOutputStream(file);          prop.store(fos,"");                    fis.close();          fos.close();      }  }  
8.IO中的其他流:
(1)打印流:
**PrintWriter:字符打印流
****构造方法:
PrintWriter(String fileName) 
创建具有指定文件名称且不带自动行刷新的新 PrintWriter。
PrintWriter(File file) 
使用指定文件创建不具有自动行刷新的新 PrintWriter。
PrintWriter(Writer out) 
创建不带自动行刷新的新 PrintWriter。 
PrintWriter(Writer out, boolean autoFlush) 
自动刷新
PrintWriter(OutputStream out) 
根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter。 
PrintWriter(OutputStream out, boolean autoFlush) 
自动刷新
****方法摘要:
PrintWriter append(char c) 
将指定字符添加到此 writer。 
void close() 
关闭该流并释放与之关联的所有系统资源。 
void flush() 
刷新该流的缓冲。 
void print(Object obj) 
打印对象。 
void print(String s) 
打印字符串。
void println() 
通过写入行分隔符字符串终止当前行。 
(2)PrintStream:字节打印流
****构造方法:
PrintStream(String fileName) 
创建具有指定文件名称且不带自动行刷新的新打印流。
PrintStream(File file) 
创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(OutputStream out) 
创建新的打印流。 
PrintStream(OutputStream out, boolean autoFlush) 
创建新的打印流。 
****方法摘要:
PrintWriter append(char c) 
将指定字符添加到此 writer。 
void close() 
关闭该流并释放与之关联的所有系统资源。 
void flush() 
刷新该流的缓冲。 
void print(Object obj) 
打印对象。 
void print(String s) 
打印字符串。
void println() 
通过写入行分隔符字符串终止当前行。
(3)管道流:
PipedInputStream
PipedOutputStream
(4)随机访问文件:RandomAccessFile
自身具备读写方法
通过skipByte(int x)和seek(int x)来达到随机访问文件
该类不是IO体系子类,而是直接继承Object,但它是IO包中的成员,因为它具备读写方法
该类内部封装了数组,而且通过指针对数组的元素进行操作,可以通过getFilePoint获取指针位置, 同时可以通过seek改变指针位置。
该类完成读写的原理是内部封装了字节输入输出流
通过该类的构造看出,该类只能操作文件,而且操作的文件只能有固定模式:
"r":只读
"rw":读写
"rws":
"red":
构造方法:
RandomAccessFile(File file, String mode) 
创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。 
RandomAccessFile(String name, String mode) 
创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。 
方法摘要:
void write(byte[] b) 
将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。 
void write(byte[] b, int off, int len) 
将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。 
void write(int b) 
向此文件写入指定的字节。 
int read() 
从此文件中读取一个数据字节。 
int read(byte[] b) 
将最多 b.length 个数据字节从此文件读入 byte 数组。 
int read(byte[] b, int off, int len) 
将最多 len 个数据字节从此文件读入 byte 数组。
String readLine() 
从此文件读取文本的下一行。 
long getFilePointer() 
返回此文件中的当前偏移量。 
long length() 
返回此文件的长度。 
void seek(long pos) 
设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
(5)操作基本数据类型的流对象:DateStream
(6)操作字节数组流:
ByteArrayInputStream
ByteArrayOutputStream

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
原创粉丝点击