操作文件
创建File类对象:
File 对象名 = new File(String path);
File 对象名 = new File(String Path,String name);
File 对象名 = new File(File dir,String name)。
说明:参数 path 指明了新创建的 File 对象对应的磁盘文件或目录名及其路径名,path 参数也可以对应磁盘上的某个目录;参数 name 表示文件或目录名;参数 dir 为另一个已存在的代表某磁盘目录的File 对象,表示文件或目录的路径。
常用方法:
public String getName() 获取文件或目录的名字。
public boolean canRead() 获取文件的可读属性,如果为可读文件,返回 true。
public boolean canWrite() 获取文件的可写属性,如果为可写文件,返回 true。
public boolean exists() 判断文件或目录是否存在,如果存在返回 true,否则返回 false。
public long length() 获取文件的长度(单位是字节)。
public String getAbsolutePath() 获取文件的绝对路径。“c:/file/hello.txt”
public String getParent() 获取文件的父目录。“c:/file”
public boolean isFile() 判断否是为文件,如果对象代表有效文件,则返回 true。
public boolean isDirectroy() 判断否是为目录,如果对象代表有效目录,则返回 true。
public boolean isHidden() 判断文件是否是隐藏文件。
public long lastModified() 获取文件最后修改的时间(时间是从 1970 年午夜至文件最后修改时刻的毫秒数)。
public String[] list() 用字符串形式返回目录下的全部文件。
public File[] listFiles() 用 File 对象形式返回目录下的全部文件。
创建一个文件:
try{
File file1 = new File("d:\\xyz.txt");
if(file1.createNewFile()){ //必须要运行这步才会产生一个新文件,但会产生一个异常
System.out.println("文件创建成功!");
}else{
System.out.println("文件已经存在");
}
}catch(IOException e){
e.printStackTrace();
}
删除文件:
File.delete(); 方法类似于File.createNewFile(); 也是个boolean类型
重命名文件:
有可能在*nix 平台下能成功地重命名一个文件,而在 Windows 平台下会失败
if(oldfile.renameTo(newfile)){
System.out.println("文件重命名成功。");
}else{
System.out.println("文件重命名失败。");
}
IO流
IO流按流向分为2类:输入流(可读不可写)和输出流(可写不可读)
IO流按数据性质分为2类:字节流(不常用)和字符流(常用)
所有字节流处理类都继承自InputStream和OutputStream
InputStream类常用方法:
int read( );读取一个字节,返回值为所读的字节。
int read( byte b[ ] );读取多个字节,放置到字节数组 b 中,通常读取的字节数量为 b 的长度,返回值为实际读取的字节的数量。
int read( byte b[ ], int off, int len );读取 len 个字节,放置到以下标 off 开始字节数组 b 中,返回值为实际读取的字节的数量。
int available( );返回值为流中尚未读取的字节的数量。
long skip( long n );读指针跳过 n 个字节不读,返回值为实际跳过的字节数量。
close( );流操作完毕后必须关闭。
void mark( int readlimit );记录当前读指针所在位置,readlimit 表示读指针读出 readlimit 个字节后所标记的指针位置才失效。
void reset( );把读指针重新指向用 mark 方法所记录的位置。
boolean markSupported( );当前的流是否支持读指针的记录功能。
OutputStream类常用方法:
void write( int b );往流中写一个字节 b。
void write( byte b[ ] );往流中写一个字节数组 b。
void write( byte b[ ], int off, int len );把字节数组 b 中从下标 off 开始,长度为 len 的字节写入流中。
flush( );把缓存中所有内容强制输出到流中。
close( );流操作完毕后必须关闭。
文件输入流 FileInputStream 类与文件输出流 FileOutputStream 类:
通过文件的路径名来构造相应的流,如:
FileInputStream infile = new FileInputStream("myfile.dat"); //对应的文件必须存在并且是可读的,FileInputStream是InputStream的子类,方法即继承而来
FileOutputStream outfile = new FileOutputStream("results.dat"); //如输出文件已存在,则必须是可覆盖的。
FileOutputStream是OutputStream的子类,但还有2个构造器:
FileOutputStream(String name) //使用给定的文件名 name 创建一个 FileOutputStream 对象
FileOutputStream(File file) //使用 File 对象创建 FileOutputStream 对象
同时使用读取和写入这两个类可以实现文件的拷贝功能
字符流
Reader类和Writer类:
Reader类是所有字符输入流的祖先
Writer类是所有字符输出流的祖先
FileReader 类和 FileWriter 类分别是 Reader 和 Writer 的子类,其构造方法分别是:
FileReader(String filename);
FileReader(File f);
FileWriter(String filename);
FileWriter(File f)。
FileReader 类:
创建FileReader类的对象的方法:FileReader fr=new FileReader(filename);
FileReader 类中的 read()方法用来读取字符并返回一个相应的 int 类型数据。当读到文件的结尾处时,则返回数值-1。在完成文件数据的读取后需要使用 close()方法关闭打开的文件。
FileWriter 类:
创建 FileWriter 类对象的格式为:
FileWriter fr=new FileWriter (filename); //文件名必须是文件的完整路径和文件名,如果程序和该文件保存在同一目录下,则可以只用文件名而不需要其路径。如果该文件名不存在,则系统会自动创建该文件
FileWriter 类中的 write()方法可以将字符或者字符串吸入文件中。当完成数据写入操作后,使用 close()方法关闭文件。