今天学习了Java.io中的两个类——
1.File类
4种构造方法:
File(File parent, String child)
File(String pathname)
File(String parent, String child)
File(URI uri)
主要的方法:
createNewFile()
mkdir()
mkdirs()
delete()
getAbsoluteFile() 绝对路径
getAbsolutePath()
getCononicalFile() 抽象路径
getCononicalPath()
getName()
getParent()
getParentFile()
getPath()
isDirectory()
isFile()
length()
list() 返回一个字符串数组,指定此抽象路径名表示的目录中的文件和目录。
listFiles()
toString() 返回此抽象路径名的路径名字符串。
例子1:
import java.io.File;
import java.io.IOException;
public class FileDemo {
<span style="white-space:pre"> </span>public static void main(String[] args) {
File file = new File("E:\\Fraps\\cc"); //了解构造函数的情况,查帮助alt+/
System.out.println(file.exists()); //查看目录存不存在
if ( ! file.exists()) //创建和删除目录
file.mkdir(); //file.mkdirs()创建多级目录
else
file.delete();
//是否是一个目录
System.out.println(file.isDirectory());
//是否是一个文件
System.out.println(file.isFile());
File file2 = new File("E:\\Fraps\\cc.txt");
//File file2 = new File("E:\\Fraps", "cc.txt"); //第二种构造函数
if ( ! file2.exists())
try {
file2.createNewFile(); //创建一个文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
else
file2.delete();
//常用的File对象的API
System.out.println(file); //file.toString()的内容
System.out.println(file.getAbsolutePath()); //同上
System.out.println(file.getName());
System.out.println(file.getParent()); //父目录
System.out.println(file.getParentFile());
System.out.println(file.getParentFile().getAbsolutePath());
}
}
例子2
import java.io.File;
import java.io.IOException;
public class FileDemo2 {
public static void listDirectory(File dir) throws IOException{
//列出指定目录下(包括其子目录)的所有文件
if (! dir.exists()){
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if (! dir.isDirectory()){
throw new IllegalArgumentException(dir + "不是目录");
}
//返回的是字符串数组,直接子的名称,不包含子目录内的文件
/*String[] filenames = dir.list(); //创建dir.list()实例类型
//foreach
for (String string : filenames) {
System.out.println(dir + "\\" + string);
}*/
//如果要遍历子目录下的内容就需要构造成File对象做递归操作
File[] files = dir.listFiles(); //返回的是直接子目录(文件)的抽象
if (files != null && files.length > 0){
for (File file : files) {
if (file.isDirectory()){
//递归
listDirectory(file);
}else{
System.out.println(file);
}
}
}
}
public static void main(String[] args) throws IOException {
FileDemo2.listDirectory (new File("E:\\Fraps"));
}
}
2.RandomAccessFile类
2种构造方法:
RandomAccessFile(File file, String mode)
RandomAccessFile(String name, String mode)
常用方法:
close()
getFilePointer()
length()
read()
read(byte[] b)
readLine()
seek() 设置指针位置
write()
writeInt()
例子:
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
public class RafDemo {
public static void main(String[] args) throws IOException {
File demo = new File("demo");
if ( ! demo.exists())
demo.mkdir();
File file = new File(demo, "raf.dat"); //demo是父目录
if ( ! file.exists())
file.createNewFile();
RandomAccessFile raf = new RandomAccessFile(file, "rw");
//指针的位置
System.out.println(raf.getFilePointer());
raf.write('A'); //只写了一个字节(后8位)
System.out.println(raf.getFilePointer());
raf.write('B');
System.out.println(raf.getFilePointer());
int i = 0x7ffffff;
//用write方法每次只能写一个字节,如果要把i写进去就得写4次
raf.write(i>>>24); //高8位
raf.write(i>>>16);
raf.write(i>>>8);
raf.write(i);
System.out.println(raf.getFilePointer());
//可以直接这么写
raf.writeInt(i); //选中按F3键可以查看底层源码
String s = "中";
byte[] gbk = s.getBytes("gbk");
raf.write(gbk);
System.out.println(raf.length());
//读文件,必须把指针移到头部
raf.seek(0);
//一次性读取
byte[] buf = new byte[(int)raf.length()];
raf.read(buf); //读入到字节数组buf中,无参数则读取一个字节
System.out.println(Arrays.toString(buf));
//以字符串形式输出
String s1 = new String(buf, "gbk");
System.out.println(s1);
//以十六进制的形式输出
for (byte b : buf) {
System.out.println(Integer.toHexString(b & 0xff)+" ");
raf.close();
}
}
}