1.文件操作简介
java.io.File File的每一个实例可以表示文件系统中的一个文件或目录,使用File可以:(1)访问文件或目录的属性(大小、名字、修改时间等);(2)操作文件或目录(创建、删除文件和目录);(3)访问目录中的所有内容。
但是不可以访问文件数据。
小实例:
public class FileDemo1 {
public static void main(String[] args) {
File file=new File("."+File.separator+"demo.txt");
//获取名字
String name=file.getName();
System.out.println("name:"+name);
//大小
long length=file.length();
System.out.println("大小为:"+length+"字节");
//是是否是文件
boolean isFile=file.isFile();
System.out.println("是否为文件:"+isFile);
//是否为目录
boolean isDirectory=file.isDirectory();
System.out.println("是否为目录:"+isDirectory);
//是否可读
boolean canRead=file.canRead();
System.out.println("是否可读:"+canRead);
//是否隐藏了
boolean isHidden=file.isHidden();
System.out.println("是否隐藏了"+isHidden);
//最后修改时间
long time=file.lastModified();
Date date=new Date(time);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
System.out.println(sdf.format(date));
}
}
2.创建一个新文件
小实例:
public class FileDemo2 {
public static void main(String[] arrays) throws IOException {
/*
* 在当前目录下创建test.txt
* boolean exists()
* 判断该文件是否真实存在
*/
File file=new File("test.txt");
if(!file.exists()) {
file.createNewFile();
System.out.println("创建完毕");
}else {
System.out.println("文件已经存在");
}
}
}
3.删除一个文件
小实例:
public class FileDemo3 {
public static void main(String[] args) {
/*
* 删除当前目录中的test.txt文件
*/
File file=new File("test.txt");
if(file.exists()) {
file.delete();
System.out.println("删除完毕");
}else {
System.out.println("文件不存在");
}
}
}
4.创建一个新目录
小实例:
public class FileDemo4 {
public static void main(String[] args) {
/*
* 在当前目录下创建一个名为demo的目录
*/
File dir=new File("demo");
if(!dir.exists()) {
dir.mkdir();
System.out.println("创建目录成功");
}else {
System.out.println("该目录已存在");
}
}
}
5.创建一个多级目录
小实例:
public class FileDemo5 {
public static void main(String[] args) {
/*
* 在当前目录下创建
* ./a/b/c/d/e/f目录
*/
File dir=new File(
"a"+File.separator+
"b"+File.separator+
"c"+File.separator+
"d"+File.separator+
"e"+File.separator+
"f"
);
if(!dir.exists()) {
dir.mkdirs();
System.out.println("多级目录创建成功");
}else {
System.out.println("目录已经存在");
}
}
}
6.获取一个目录中的所有子项
public class FileDemo7 {
public static void main(String[] args) {
/*
* 获取当前目录中的所有子项
*/
File dir=new File(".");
/*
* boolean isFile()
* 判断是否为一个文件
*
* boolean isDirectory
* 判断是否为一个目录
*/
if(dir.isDirectory()) {
/*
* File[] listFiles()
*/
File[] subs=dir.listFiles();
for(File sub:subs) {
if(sub.isFile()) {
System.out.print("文件:");
}else {
System.out.print("目录:");
}
System.out.println(sub.getName());
}
}
}
}
7.获取一个目录中符合条件的部分子项
使用重载的listFiles方法,需要传入一个额外的文件过滤器,文件过滤器是一个接口:FileFilter
小实例:
public class FileDemo8 {
public static void main(String[] args) {
File file=new File(".");
/*
* 获取名字以"."开头的子项
*/
File[] subs=file.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
// TODO Auto-generated method stub
return file.getName().startsWith(".");
}
});
for(File sub:subs) {
System.out.println(sub.getName());
}
}
}
8.删除多级目录下的给定的文件
小实例:
/**
* 实现方法,来删除给定的文件
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
File dir=new File("a");
delete(dir);
}
//删除目录或文件对象
public static void delete(File file) {
if(file.isDirectory()) {
//现将其所有子项列出来
File[] subs=file.listFiles();
for(File sub:subs) {
delete(sub);//递归调用
}
}
file.delete();
}
}
9.RandomAccessFileDemo
java.io.RandomAccessFile 用来读写文件数据,RAF是基于指针进行读写的,即RAF总是在指针指向的位置读写字节,并且读写后指针会自动向后移动。RAF即可以读取文件数据也可以向文件中写入数据。读取低8位的数据。
public class RandomAcessFileDemo1 {
public static void main(String[] args) throws IOException {
/*
* RandomAccessFile(String path,String mode)
*
* RandomAceesFile(File file,String mode)
* 第二个参数为模式:常用的有
* r:只读模式
* rw:读写模式
*/
RandomAccessFile raf=new RandomAccessFile("raf.dat","rw");
/*
* void write(int b)
* 写出对应的int值对应的2进制的低8位
* xxxxxxxx
* 00000000 00000000 00000000 00000001
*/
raf.write(97);
System.out.println("写出完毕");
raf.close();
}
}
10.读写文件数据
小实例:
/**
* 读取文件数据
* @author Administrator
*
*/
public class RandomAccessFileDemo2 {
public static void main(String[] args) throws IOException {
RandomAccessFile raf=new RandomAccessFile("raf.dat", "r");
/*
* int read()
* 读取一个字节并以十进制的int型表示
*/
int d=raf.read();
System.out.println(d);
raf.close();
}
}
11.RAF提供了方便读写基本类型数据的方法
/**
* RAF提供了方便读写基本类型数据的方法
* @author Administrator
*
*/
public class RandomAccessFileDemo3 {
public static void main(String[] args) throws IOException {
RandomAccessFile raf=new RandomAccessFile("raf1.dat","rw" );
/*
* long getFilePointer()
* 获取当前RAF的指针位置
*/
System.out.println("pos1:"+raf.getFilePointer());
//向文件中写入一个int最大值
int max=Integer.MAX_VALUE;
raf.write(max>>>24);
raf.write(max>>>16);
raf.write(max>>>8);
raf.write(max);
System.out.println("pos2:"+raf.getFilePointer());
raf.writeInt(max);
raf.writeLong(1234L);
raf.writeDouble(123.123);
System.out.println("pos3:"+raf.getFilePointer());
/*
* void seek(long pos)
* 移动指针到指定位置
*/
raf.seek(0);
System.out.println("pos4:"+raf.getFilePointer());
int Max=raf.readInt();
System.out.println("max:"+Max);
raf.close();
}
}
12.复制文件的实例demo1:
public class CopyDemo1 {
public static void main(String[] args) throws IOException {
/*
* 创建一个RAF读取原文件,再创建一个RAF向目标文件中写出
* 顺序从原文件中读取每一个字节并写入到目标文件中即可
*/
RandomAccessFile src=new RandomAccessFile("music.mp3", "r");
RandomAccessFile desc=new RandomAccessFile("music_cp.mp3", "rw");
//保存复制的字节
int d=-1;
long start=System.currentTimeMillis();
while((d=src.read())!=-1) {
desc.write(d);
}
long end=System.currentTimeMillis();
System.out.println("复制完毕,耗时为:"+(end-start)+"毫秒");
src.close();
desc.close();
}
}
13.复制文件的实例demo2:
/**
* 若想提高读写效率,可以通过提高每次读写的数据量来减少读写次数达到
* @author Administrator
*
*/
public class CopyDemo2 {
public static void main(String[] args) throws IOException {
RandomAccessFile src=new RandomAccessFile("music.mp3", "r");
RandomAccessFile desc=new RandomAccessFile("m_cp.mp3","rw");
/*
* int read(byte[] data)
* 一次性尝试读取给定的字符长度的字节量并存入到该数组中
* 返回值为实际读取大ode字符量
* 若返回值为-1,则本次没有读取任何数据
*/
//10K
byte[] buf=new byte[1024*10];
/*
* void write(byte[] d,int start,int end)
* 将给定数组中从下表start到end个连续个字节独处
*/
int len=-1;
long start=System.currentTimeMillis();
while((len=src.read(buf))!=-1) {
desc.write(buf,0,len);//从buf数组中从0读到len个
}
long end=System.currentTimeMillis();
System.out.println("复制完毕,耗时为"+(end-start)+"毫秒");
src.close();
desc.close();
}
}