文件对象
File类型有四种构造函数
常用方法:
exist()//是否存在
isDirectory()//是否为文件夹
isFile()//是否为文件
length()//字节数量
//文件最后修改时间
long time = f.lastModified();
Date d = new Date(time);
System.out.println("获取文件的最后修改时间:"+d);
setLastModified()//设置文件最后修改的时间
renameTo()//文件实体重命名
list()//以字符串数组的形式,返回当前文件夹下的所有文件(夹)(不包含子文件及子文件夹)
listFiles() // 以文件数组的形式,返回当前文件夹下的所有文件(夹)(不包含子文件及子文件夹)
getParent();// 以字符串形式返回获取所在文件夹
getParentFile();// 以文件形式返回获取所在文件夹
mkdir()// 创建文件夹,如果父文件夹skin不存在,创建就无效
mkdirs();// 创建文件夹,如果父文件夹不存在,可以创建多层父文件夹;实际上是递归调用,最终调用mkdir()方法
createNewFile();// 创建一个空文件,如果父文件夹skin不存在,就会抛出异常
getParentFile().mkdirs();// 所以创建一个空文件之前,通常都会创建父目录
listRoots();// 列出所有的盘符c: d: e: 等等
delete();// 刪除文件
deleteOnExit(); // JVM结束的时候,刪除文件,常用于临时文件的删除
文件输入输出字节流
在FileOutputStream的构造函数中设置向文件中追加。
FileOutputStream在路径存在的情况下,可以自动创建新文件。
fis.read()及fos.write()方法可以设置读入或写入的字节数组的位置及长度。
fos.read()方法返回实际读入字节数组的字节的数量。
拆分文件:
while(true)
{
length=fis.read(b);
System.out.println(length);
if (length==-1)
break;
FileOutputStream fos=new FileOutputStream(
"Q:\\课程02.exe"+"-"+number);
number++;
fos.write(b,0,length);
fos.close();
}
合并文件:
FileOutputStream fos= new FileOutputStream(str);
while(true)
{
File f=new File(str+"-"+number);
if(!f.exists())
break;
number++;
FileInputStream fis=new FileInputStream(f);
fis.read(b,0,(int) f.length());
fis.close();
fos.write(b,0,(int) f.length());
}
fos.close();
fos.flush()对于有缓冲区的流,此方法可以立刻进行写,而不是等缓冲区满才写。
关闭流的方式:
try{}不推荐,可能出现异常
finally{}
try()自动关闭,实现了AutoCloseable接口
文件读取写入字符流
FileReader 构造函数传入不存在的文件是会报出异常,从而得到空引用。
FileWriter可以创建不存在的文件。
foreach不能改变字符数组的字符。foreach更多用来输出。
编码
ISO-8859-1 ASCII 数字和西欧字母
GBK GB2312 BIG5 中文
UNICODE (统一码,万国码)
ISO-8859-1 包含 ASCII
GB2312 是简体中文,BIG5是繁体中文,GBK同时包含简体和繁体以及日文。
UNICODE 包括了所有的文字,无论中文,英文,藏文,法文,世界所有的文字都包含其中
UTF-8对数字和字幕使用一个字节,对汉字使用三个字节
getBytes(codeset)方法可以获取相应编码下的字节数组。
FileReader不能设置编码集,如果要能够设置编码集,可以使用InputStreamReader。
InputStreamReader isr = new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8"))
十六进制数字0xE5
转换为字节:(byte)0xE5
缓冲流
提高效率
BufferedReader br=new BufferedReader(new FileReader(f));
PrintWriter pw=new PrintWriter(new FileWriter(f,true));
pw可以使用格式化输出。
创建PrintWriter时,如果不声明追加,就会把目标文件清空!!!
String类的trim()方法可以去除字符串首尾的空白,startWith()方法可以判断是否以特定前缀开始。
\r\n,StringBuffer用于添加换行
数据流
能够读取数据。
DataOutputStream dos=new DataOutputStream(new FileOutputStream(f));可以声明是否追加
DataInputStream dis=new DataInputStream(new FileInputStream(f));
但必须成对的写和读。
对象流
ObjectOutputStream oos= new ObjectOutputStream(new FileOutputStream(f));
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(f));
oos.writeObject(h);
(强制类型转换) ois.readObject();
对象所属的类要实现Seralizable接口,implements Serializable
文件复制采用字节流,字符流可能乱码