JAVA中的文件及目录处理类
在Java中提供了操作文件及目录(即我们所说的文件夹)类File。有以下几点注意事项:
(1)不论是文件还是目录都使用File类操作;
(2)File类只提供操作文件及目录的方法,并不能访问文件的内容,所以他描述的是文件本身的属性;
(3)如果要访问文件本身,用到了我们下面要学习的IO流.
一:构造方法
File 文件名/目录名 = new File("文字路径字符串");
在Java中提供了几种创建文件及目录的构造方法,但大体上都是用参数中的文字路径字符串来创建。
二:一般方法
(1)文件检测相关方法
boolean isDirectory():判断File对象是不是目录
boolean isFile():判断File对象是不是文件
boolean exists():判断File对象对应的文件或目录是不是存在
(2)文件操作的相关方法
boolean createNewFile():路径名指定的文件不存在时,创建一个新的空文件
boolean delete():删除File对象对应的文件或目录
(3)目录操作的相关方法
boolean mkdir():单层创建空文件夹
boolean mkdirs():多层创建文件夹
File[] listFiles():返回File对象表示的路径下的所有文件对象数组
(4)访问文件相关方法
String getName():获得文件或目录的名字
String getAbsolutePath():获得文件目录的绝对路径
String getParent():获得对象对应的目录的父级目录
long lastModified():获得文件或目录的最后修改时间
long length() :获得文件内容的长度
目录的创建
public class MyFile {
public static void main(String[] args) {
//创建一个目录
File file1 = new File("d:\test");
//判断对象是不是目录
System.out.println("是目录吗?"+file1.isDirectory());
//判断对象是不是文件
System.out.println("是文件吗?"+file1.isFile());
//获得目录名
System.out.println("名称:"+file1.getName());
//获得相对路径
System.out.println("相对路径:"+file1.getPath());
//获得绝对路径
System.out.println("绝对路径:"+file1.getAbsolutePath());
//最后修改时间
System.out.println("修改时间:"+file1.lastModified());
//文件大小
System.out.println("文件大小:"+file1.length());
}
}
程序首次运行结果:
是目录吗?false
是文件吗?false
名称:test
相对路径:d:\test
绝对路径:d:\test
修改时间:0
文件大小:0
file1对象是目录啊,怎么在判断“是不是目录”时输出了false呢?这是因为只是创建了代表他是目录的对象,还没有真正的创建,这时候要用到mkdirs()方法,如下:
public class MyFile {
public static void main(String[] args) {
//创建一个目录
File file1 = new File("d:\\test\\test");
file1.mkdirs();//创建了多级目录
//判断对象是不是目录
System.out.println("是目录吗?"+file1.isDirectory());
}
}
文件的创建
public class MyFile {
public static void main(String[] args) {
//创建一个文件
File file1 = new File("d:\\a.txt");
//判断对象是不是文件
System.out.println("是文件吗?"+file1.isFile());
}
}
首次运行结果:
是文件吗?false
同样会发现类似于上面的问题,这是因为只是代表了一个文件对象,并没有真正的创建,要用到createNewFile()方法,如下
public class MyFile {
public static void main(String[] args) {
//创建一个文件对象
File file1 = new File("d:\\a.txt");
try {
file1.createNewFile();//创建真正的文件
} catch (IOException e) {
e.printStackTrace();
}
//判断对象是不是文件
System.out.println("是文件吗?"+file1.isFile());
}
}
文件夹与文件的创建目录
文件时存放在文件夹下的,所以应该先创建文件夹,后创建文件,如下:
public class MyFile {
public static void main(String[] args) {
//代表一个文件夹对象,单层的创建
File f3 = new File("d:/test");
File f4 = new File("d:/test/a.txt");
f3.mkdir();//先创建文件夹,才能在文件夹下创建文件
try {
f4.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
//代表一个文件夹对象,多层的创建
File f5= new File("d:/test/test/test");
File f6 = new File("d:/test/test/test/a.txt");
f5.mkdirs();//多层创建
try {
f6.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果为,在D磁盘的test文件夹下有一个a.txt,在D磁盘的test/test/test下有一个a.txt文件。
编程:判断是不是有这个文件,若有则删除,没有则创建
public class TestFileCreatAndDele {
public static void main(String[] args) {
File f1 = new File("d:/a.txt");
if(f1.exists()){//文件在吗
f1.delete();//在就删除
}else{//不在
try {
f1.createNewFile();//就重新创建
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
文件的逐层读取
File的listFiles()只能列出当前文件夹下的文件及目录,那么其子目录下的文件及目录该如何获取呢?解决的办法有很多,在这运用递归解决.
//逐层获取文件及目录
public class TestFindFile {
public static void openAll(File f) {// 递归的实现
File[] arr = f.listFiles();// 先列出当前文件夹下的文件及目录
for (File ff : arr) {
if (ff.isDirectory()) {// 列出的东西是目录吗
System.out.println(ff.getName());
openAll(ff);// 是就继续获得子文件夹,执行操作
} else {
// 不是就把文件名输出
System.out.println(ff.getName());
}
}
}
public static void main(String[] args) {
File file = new File("d:/test");// 创建目录对象
openAll(file);// 打开目录下的所有文件及文件夹
}
}
流
输入——>java程序———>输出
字节输入流(FileInputStream)
package FileDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.lang.reflect.Array;
import java.util.Arrays;
/**
* Created by ttc on 18-1-14.
*/
public class FileInputStreamDemo {
public static void main(String[] args) throws Exception {
// 创建源,挖井
File f=new File("e:/hu/wo.txt");
InputStream ff=new FileInputStream(f);
int a=ff.read();
int index=0;
byte[] bytes=new byte[10];
while (a!=-1)
{
bytes[index++]=(byte) a;
a=ff.read();
}
String str=new String(bytes,0,3);
System.out.println(str);
// System.out.println(a);
// System.out.println(ff.read());
//
// int b=ff.read(bytes,0,3);
// System.out.println(b);
// for(byte v:bytes)
// {
// System.out.println(v);
// }
//
}
}
复制文件
package FileDemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* Created by ttc on 18-1-15.
*/
public class copyFile {
public static void main(String[] args) throws Exception {
File files=new File("d:/d.txt");
FileInputStream fileInputStream=new FileInputStream(files);
FileOutputStream fileOutputStream=new FileOutputStream("e:/bbat.txt");
byte[] buffer=new byte[500];
int count=fileInputStream.read(buffer);
while (count!=-1)
{
System.out.println(count);
fileOutputStream.write(buffer,0,count);
count=fileInputStream.read(buffer);
}
fileInputStream.close();
fileOutputStream.close();
}
}
字符输入流(FileReader)
package FileDemo;
import java.io.*;
/**
* Created by ttc on 18-1-15.
*/
public class FileReaderDemo {
public static void main(String[] args) throws Exception {
// FileReader fileReaders=new FileReader("d:/d.txt");
// char[] arr=new char[100];
// int len=fileReaders.read(arr);
// StringBuffer sb=new StringBuffer();
// while (len!=-1)
// {
// sb.append(arr);
// len=fileReaders.read(arr);
// }
// System.out.println(sb.toString());
// }
FileReader fileReaders=new FileReader("d:/d.txt");
BufferedReader br=new BufferedReader(fileReaders);
StringBuilder sb=new StringBuilder();
String str=br.readLine();
while (str!=null)
{
sb.append(str);
sb.append("\n");
sb.append("\r") ;
str=br.readLine();
}
System.out.println(sb.toString());
}
}
递归求当前目录下的文件及子文件行数
package FileDemo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
/**
* Created by ttc on 18-1-15.
*/
public class calcuLine {
public static int openAll(File file) throws Exception {
int num=0;
File[] ff=file.listFiles();
for(File f:ff)
{
if(f.isFile())
{
FileReader fr=new FileReader(f);
BufferedReader br=new BufferedReader(fr);
String str=br.readLine();
while (str!=null)
{
str=br.readLine();
num++;
}
}
else
{
openAll(f);
}
}
return num;
}
public static void main(String[] args) throws Exception {
File files =new File("D:\\File\\src\\FileDemo");
int num=openAll(files);
System.out.println(num);
}
}
格式模版保存在文本文件pet.template中,内容如下:
您好!
我的名字是{name},我是一只{type}。
我的主人是{master}。
其中{name}、{type}、{master}是需要替换的内容,现在要求按照模板格式保存宠物数据到文本文件,即把{name}、{type}、{master}替换为具体的宠物信息,该如何实现呢?
实现思路
1.创建字符输入流BufferedReader对象
2.创建字符输出流BufferedWriter对象
建StringBuffer对象sbf,用来临时存储读取的
数据
通过循环实现文件读取,并追加到sbf中
使用replace()方法替换sbf中的内容
将替换后的内容写入到文件中
关闭输入流、输出流
package FileDemo;
import java.io.*;
/**
* Created by ttc on 18-1-15.
*/
public class strReplace {
public static void main(String[] args) throws Exception {
Reader fr=new FileReader("C:\\Documents and Settings\\ttc\\feiq\\Recv Files/email.txt");
BufferedReader br=new BufferedReader(fr);
String str=br.readLine();
StringBuilder sb=new StringBuilder();
while (str!=null)
{
sb.append(str);
str=br.readLine();
}
// System.out.println(sb.toString());
String str1=sb.toString();
email e=new email();
e.setTo("妈妈");
e.setContent("i love y");
e.setFrom("woya");
str1=str1.replace("{to}",e.getTo());
str1=str1.replace("{content}",e.getContent());
str1=str1.replace("{from}",e.getFrom());
// System.out.println(str1);
FileWriter fw=new FileWriter("d:/aaa.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write(str1);
bw.flush();
br.close();
bw.close();
fw.close();
}
}
package FileDemo;
/**
* Created by ttc on 18-1-15.
*/
public class email {
private String to;
private String content;
private String from;
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
}