学习内容:
- File类
1.1 File类简介
1.2 File类的使用—操作文件
1.3 File类的使用—操作目录 - 常用IO流对象
2.1文件字节输入/输出流
2.2 通过缓冲区提高读写效率
2.3定义文件拷贝工具类
2.4文件字符输入/输出流
学习内容:
1.File类
1.1 File类简介
- File类是Java提供的针对磁盘中的文件或目录转换对象的包装类。一个File对象可以代表一个文件或目录,File对象可以实现获取文件或目录属性等功能,可以实现对文件和目录的创建,删除功能。
- 常用方法
- 针对文件操作的方法
- createNewFlie()//创建新文件
- delete()//直接从磁盘删除
- exists()//查询磁盘中的文件是否存在
- getAbsolutePath()//获取绝对路径
- getPath()//获取相对路径
- getName()//获取文件名,相当于调用了一个toString
- isFile()//判断是否是文件
- length()//查看文件中的字节数
- isHidden()//测试文件是否是一个隐藏文件
- 针对目录操作的方法
- exists()//查询目录是否存在
- isDirectory()//判断当前路径是否为目录
- mkdir()//创建目录
- getParentFile()//获取当前目录的父级目录
- list()//返回一个字符串数组,包含目录中的文件和目录的路径名。
- listFile//返回一个File数组,表示用此抽象路径名表示的目录中的文件
1.2File类的使用—操作文件
创建新文件
import java.io.File;
public class day2 {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("d:/aa.txt");
System.out.println(file.createNewFile());
}
}
输出结果:
true
从磁盘删除,查询磁盘中的文件是否存在
import java.io.File;
public class day2 {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("d:/aa.txt");
//System.out.println(file.createNewFile());
System.out.println(file.delete());//删除aa.txt
System.out.println(file.exists());//判断是否存在aa.txt
}
}
输出结果:
true
false
获取文件名
import java.io.File;
public class day2 {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("d:/aa.txt");
System.out.println(file.createNewFile());
//System.out.println(file.delete());//删除aa.txt
System.out.println(file.exists());//判断是否存在aa.txt
System.out.println(file.getName());//获取文件名
}
}
输出结果
true
true
aa.txt
判断是否为文件,测试文件是否是一个隐藏文件,查看文件中的字节数
import java.io.File;
public class day2 {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("d:/aa.txt");
System.out.println(file.createNewFile());
//System.out.println(file.delete());//删除aa.txt
System.out.println(file.exists());//判断是否存在aa.txt
System.out.println(file.getName());//获取文件名
System.out.println(file.isFile());//判断file是不是一个文件
System.out.println(file.isHidden());//判断是否为隐藏文件
System.out.println(file.length());//查看文件中的字节数
}
}
输出结果
false
true
aa.txt
true
false
0
1.3File类的使用—操作目录
import java.io.File;
public class day2 {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("d:/a/b/c");
//System.out.println(file.mkdir());//创建单极目录
//System.out.println(file.mkdirs());//创建多级目录
System.out.println(file.exists());
System.out.println(file.isDirectory());//判断是否为目录
System.out.println(file.getParent());//父级目录
System.out.println(file.getParentFile().getName());//
File file2 = new File("d:/");
String[] arr = file2.list();
for(String temp:arr) {
System.out.println(temp);
}
System.out.println("------------------");
File[] arr2 = file2.listFiles();
for(File temp :arr2) {
System.out.println(temp);
}
}
}
输出结果:
true
d:\a\b
b
$RECYCLE.BIN
5a01e2296a86d21c0599d25be4c2670d
a
a.txt
aa.txt
aurora
aurora-2.7.12-Setup-1-a.exe
Drivers
eclipse-inst-jre-win64.exe
EDU
FormatFactory
fyvideo
Gongzi.rar
java
Javaworkspace
LenovoSoftstore
LeStoreDownload
Ps
QQLive
salary
System Volume Information
Temp
VS2017
vs2017缓存
WeGameApps
剧本杀
工资管理系统
游戏文件夹
漫画.rar
电影
------------------
d:\$RECYCLE.BIN
d:\5a01e2296a86d21c0599d25be4c2670d
d:\a
d:\a.txt
d:\aa.txt
d:\aurora
d:\aurora-2.7.12-Setup-1-a.exe
d:\Drivers
d:\eclipse-inst-jre-win64.exe
d:\EDU
d:\FormatFactory
d:\fyvideo
d:\Gongzi.rar
d:\java
d:\Javaworkspace
d:\LenovoSoftstore
d:\LeStoreDownload
d:\Ps
d:\QQLive
d:\salary
d:\System Volume Information
d:\Temp
d:\VS2017
d:\vs2017缓存
d:\WeGameApps
d:\剧本杀
d:\工资管理系统
d:\游戏文件夹
d:\漫画.rar
d:\电影
2.常用IO流对象
2.1 文件字节输入/输出流
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class day2 {
public static void main(String[] args) throws Exception{
FileInputStream fis = null;
FileOutputStream fos = null;
fis = new FileInputStream("d:/sxt.jpg");//创建文件字节输入流对象
fos = new FileOutputStream("d:/aa.jpg");//创建文件字节输出流对象
int temp = 0;
while ((temp = fis.read())!= -1) {
//System.out.println(temp);
fos.write(temp);
}
//将数据从内存中写入磁盘中。
fos.flush();
if(fis !=null) {
fis.close();
}
if(fos != null) {
fos.close();
}
}
}
2.2 通过缓冲区提高读写效率
- 方式一(内存大时使用)
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileStreamBuffedDemo {
public static void main(String[] args) throws Exception{
FileInputStream fis = null;
FileOutputStream fos = null;
fis = new FileInputStream("d:/sxt.jpg");//创建文件字节输入流对象
fos = new FileOutputStream("d:/bb.jpg");//创建文件字节输出流对象
byte[] buff= new byte [1024];
//创建一个缓冲区,提高读取效率
int temp = 0;
while ((temp = fis.read(buff))!= -1) {
//System.out.println(temp);
fos.write(buff, 0, temp);
}
//将数据从内存中写入磁盘中。
fos.flush();
if(fis !=null) {
fis.close();
}
if(fos != null) {
fos.close();
}
}
}
- 方式二(内存小时使用)
package com.bilibili.iodemo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileStreamBuffedDemo2 {
public static void main(String[] args) throws Exception{
FileInputStream fis = null;
FileOutputStream fos = null;
fis = new FileInputStream("d:/sxt.jpg");//创建文件字节输入流对象
fos = new FileOutputStream("d:/cc.jpg");//创建文件字节输出流对象
byte[] buff= new byte [fis.available()];
//创建一个缓冲区,提高读取效率
fis.read(buff);
fos.write(buff);
fos.flush();
if(fis !=null) {
fis.close();
}
if(fos != null) {
fos.close();
}
}
}
- 通过字节缓冲流提高读写效率
package com.bilibili.iodemo;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileStreamBuffedDemo3 {
public static void main(String[] args) throws Exception{
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
//注意关闭流顺序,后开的先关闭
fis = new FileInputStream("d:/sxt.jpg");
bis = new BufferedInputStream(fis);
fos = new FileOutputStream("d:/dd.jpg");
bos = new BufferedOutputStream(fos);
//缓冲区中,byte数组长度默认的是8192也就是2的13次方
int temp = 0;
while ((temp = bis.read()) != -1) {
bos.write (temp);
}
if(bis != null) {
bis.close();
}
if(fis != null) {
fis.close();
}
if(bos !=null) {
bos.close();
}
if(fos != null) {
fos.close();
}
}
}
2.3 定义文件拷贝工具类
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileCopyTools {
public static void main(String[] args) throws Exception{
copyFile("d:/aa.jpg","d:/abc.jpg");
}
/**
* 文件拷贝方法
*/
public static void copyFile(String src,String des) throws Exception{
FileInputStream fis =null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
fis = new FileInputStream(src);
bis = new BufferedInputStream(fis);
/*这两行代码可以简写为
*bis = new BufferedInputStream(new FileInputStream (src));
*/
bos = new BufferedOutputStream(new FileOutputStream(des));
int temp = 0;
while((temp = bis.read()) != -1) {
bos.write(temp);
}
bos.flush();
if(bis != null) {
bis.close();
}
if(fis != null) {
fis.close();
}
if(bos !=null) {
bos.close();
}
if(fos != null) {
fos.close();
}
}
}
2.4 文件字符输入/输出流
输入流:
import java.io.FileReader;
public class FileReaderDemo {
public static void main(String[] args)throws Exception {
FileReader frd = new FileReader("d:/a.txt");
///frd.read();//仍然是一次读一个字符
int temp = 0;
while ((temp = frd.read()) !=-1) {
System.out.println(temp);
}
if(frd != null) {
frd.close();
}
}
}
注意:如果frd.read();在while前面已经读过一次了,那么在while中将不会再从第一个字符开始读取,而是从第二个字符读取。
输出流:
import java.io.FileWriter;
public class FileWriterDemo {
public static void main(String[] args) throws Exception{
FileWriter fw = null;
FileWriter fw2 = null;
fw =new FileWriter("d:/hello.txt");//创建字符输出对象
fw.write("哈喽\r\n");//"\r\n"是换行的意思
fw.write("世界\r\n");//FileWriter多次.write会追加
fw.flush();
fw2 = new FileWriter("d:/hello.txt",true);//添加了特殊指令“true”,则会追加
fw2.write("何以解忧\r\n");
fw2.write("唯有杜康");
fw2.flush();//若对象为同一文件夹,如果没有特殊指令,则会默认覆盖
if(fw != null) {
fw.close();
}
if(fw !=null) {
fw.close();
}
}
}