File类简介
- File 类用来代表文件或文件夹,通过 File 类,可以对文件与文件夹进行丰富的操作,并且可以获取文件的路径、大小、文件名等信息。
文件的创建、删除、重命名
- 通过文件类的 createNewFile() 方法创建文件
- 通过 delete() 方法删除文件
- 使用 renameTo() 方法重命名文件,renameTo() 方法时依靠另一个 File 对象来重命名。
public class FileTest {
public static void main(String[] args) {
// 创建文件对象
File file = new File("Hello File.txt");
File file2 = new File("newHello.txt");
try {
file.createNewFile(); //创建文件
System.out.println("创建文件成功");
} catch (IOException e) {
System.out.println("创建文件失败");
}
file.renameTo(file2); //文件重命名
}
}
文件夹的创建、删除、重命名
- 通过 mkdir() 与 mkdirs() 方法创建文件夹:如果想创建一层接着又一层的文件夹,则用 mkdirs() 方法,自动补全中间的文件夹。
- 通过 delete() 方法删除文件夹
- 使用 renameTo() 方法对文件夹重命名
public class FileTest {
public static void main(String[] args) {
// 创建文件夹对象
File floder = new File("Hello floder");
File floder1 = new File("new floder/one/two/three/main");
File floder2 = new File("new Hello fioder");
if(floder.mkdir()){
//mkdir() 方法返回的是boolean类型值,所以可以做判断是否创建成功
System.out.println("文件夹创建成功");
}else if(floder.exists()){
//exists()方法为判断是否存在当前文件夹,返回bollean值类型
System.out.println("文件夹以存在,不用创建");
}else {
System.out.println("创建文件夹失败");
}
// mkdirs()方法自动完成one two three main 文件夹的创建
floder1.mkdirs();
floder.renameTo(floder2);//重命名文件夹
//floder.delete(); //删除该文件夹
}
}
文件属性的读取
- getName() 方法读取文件名称
- getPath() 方法读取文件路径
- getAbsolutePath() 方法读取文件的绝对路径
- getParent() 方法读取父级路径
- length() 方法读取文件大小
- isHidden() 方法读取文件是否被隐藏
- canRead() 方法判断文件是否可读
- canWrite() 方法判断文件是否可写
- isDirectory() 方法判断文件是否为文件夹
public class FileTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("floder/Hello.txt");
//判断文件是否存在
System.out.println("文件是否存在:"+file.exists());
//读取文件名称
System.out.println("文件的名称 :"+file.getName());
//读取文件路径
System.out.println("文件的路径:"+file.getPath());
//读取文件绝对路径
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
//读取文件父级路径
System.out.println("文件的父级路径:"+file.getParent());
//读取文件大小
System.out.println("文件的大小:"+file.length());
//判断文件是否被隐藏
System.out.println("文件是否被隐藏:"+file.isHidden());
//判断文件是否可读
System.out.println("文件是否可读:"+file.canRead());
//判断文件是否可写
System.out.println("文件是否可写:"+file.canWrite());
//判断文件是否为文件夹
System.out.println("判断是否为文件夹:"+file.isDirectory());
}
}
文件属性的设置
- setWritable() 方法设置文件是否可写
- setReadable() 方法设置文件是否可读
- setReadOnly() 方法设置文件只读
public class FileReadWrite {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("floder/Hello.txt");
//设置文件可写
file.setWritable(true);
//设置文件可读
file.setReadable(true);
//设置文件为只读
file.setReadOnly();
}
遍历文件夹
- 通过使用 listFile() 方法获取文件夹中的所有项目,包括文件和文件夹。查看 listFile() 方法可以发现其返回的是一个文件类型的数组。
- 以下例子将利用递归思想实现文件夹的遍历
public class FileScaner {
public static void main(String[] args) {
// TODO Auto-generated method stub
scanerFile(new File("E:/study_Java"),1);
}
public static void scanerFile(File dir,int tab) {
if (dir.isDirectory()) {//判断是否为文件夹
//将该文件夹下所有的文件及文件夹存入数组中
File nextDir[]= dir.listFiles();
for (int i = 0; i < nextDir.length; i++) {
// 这个for循环为了增强输出格式的可读性
for (int j = 0; j < tab; j++) {
System.out.print("|--");
}
//输出文件及文件夹名
System.out.println(nextDir[i].getName());
if (nextDir[i].isDirectory()) {
//如果为文件夹,则递归调用sannerFile
scanerFile(nextDir[i],tab+1);
}
}
}
}
}
文件的简单读写
- I/O 流中有文件的输入输出类
- FileInputStream 继承 InputStream,可以通过其创建文件字节输入流; FileOutputStream 继承 OutputStream,可以通过其创建文件字节输出流
- 通过 InputStreamReader 类创建字符输入流;通过 OutputStreamReader 类创建字符输出流
- 通过 BufferReader 类创建数据缓冲流,再使用 readLine() 方法获取缓冲流的数据
- 具体实现分析一下代码
public class ReadWriteTextFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
readFile(new File("floder/Hello.txt"));
writeFile(new File("floder/HelloWrite"));
}
public static void readFile(File file) {
try {
//创建文件字节输入流
FileInputStream fis = new FileInputStream(file);
//创建字符输入流
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
//创建缓冲流
BufferedReader br = new BufferedReader(isr);
String line ;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
isr.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writeFile (File file) {
try {
//创建文件输出流
FileOutputStream fos = new FileOutputStream(file);
//创建字符输出流
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
//创建输出缓冲流
BufferedWriter bw = new BufferedWriter(osw);
osw.write("宣州谢朓楼饯别校书叔云\n");
osw.write("弃我去者,昨日之日不可留;\n");
osw.write("乱我心者,今日之日多烦忧。\n");
osw.close();
osw.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}