1.创建文件
// 引入包
import java.io.File;
// 引入异常监听
import java.io.IOException;
public class HelloWorld{
// 入口
public static void main(String []args) throws IOException {
// 设置文件路径
String path = "demo"+File.separator+"test.log";
// 设置路径
File file = new File(path);
// 创建文件
boolean res = file.createNewFile();
System.out.println(res);
}
}
2.判断文件是否存在
// 引入包
import java.io.File;
public class HelloWorld{
// 入口
public static void main(String []args){
// 设置文件路径
String path = "demo"+File.separator+"test.log";
// 设置路径
File file = new File(path);
// 判断文件是否存在
if (file.exists()) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
3.修改文件
修改文件名称,直接使用跟目录重命名一样的File.renameTo()
方法即可。
4.删除文件
删除文件,直接使用跟目录删除一样的File.delete()
方法即可。
5.获取文件是否可读写
// 引入包
import java.io.File;
public class HelloWorld{
// 入口
public static void main(String []args){
// 设置文件路径
String path = "demo"+File.separator+"test.log";
// 设置路径
File file = new File(path);
// 是否可读
boolean bool1 = file.canRead();
// 是否可写
boolean bool2 = file.canWrite();
System.out.println(bool1);
System.out.println(bool2);
}
}
6.设置文件权限
// 引入包
import java.io.File;
public class HelloWorld{
// 入口
public static void main(String []args){
// 设置文件路径
String path = "demo"+File.separator+"test.log";
// 设置路径
File file = new File(path);
//设置可执行权限
boolean bool1 = file.setExecutable(true);
//将文件设定为可写
boolean bool2 = file.setWritable(true);
//将文件设定为可读
boolean bool3 = file.setReadable(true);
//将文件设定为只读
boolean bool4 = file.setReadOnly();
System.out.println(bool1);
System.out.println(bool2);
System.out.println(bool3);
System.out.println(bool4);
}
}
7.复制文件
// 引入包
import java.io.File;
// 引入文件操作包
import java.nio.file.Files;
// 引入异常类
import java.io.IOException;
public class HelloWorld{
// 入口
public static void main(String []args) throws IOException {
// 设置A文件路径
String pathA = "demo"+File.separator+"test.log";
// 设置路径
File fileA = new File(pathA);
// 设置B文件路径
String pathB = "demo"+File.separator+"demo.log";
// 设置路径
File fileB = new File(pathB);
//复制文件
Object path = Files.copy(fileA.toPath(), fileB.toPath());
// 成功返回文件的路径,但却是个对象类型,不知道为啥
System.out.println(path);
}
}
8.写入文件
// 引入包
import java.io.File;
// 引入文件内容操作包
import java.io.FileOutputStream;
// 引入异常类
import java.io.IOException;
public class HelloWorld{
// 入口
public static void main(String []args) throws IOException {
// 设置A文件路径
String path = "demo"+File.separator+"A2.log";
// 设置路径
File file = new File(path);
// 第二个参数可追加true参数,表示在原有文件末尾追加信息
FileOutputStream outputStream = new FileOutputStream(file, true);
// 自动接上换行符
String data = "Hello javaFile"+System.lineSeparator();
// 写入文件[返回值是null]
outputStream.write(data.getBytes());
// 数据全部送出
outputStream.flush();
// 然后再关闭文件流
outputStream.close();
}
}
注意:如果文件不存在,也会自动帮忙创建文件的哦,但需要目录有写入权限。
9.读取文件
文件读取操作大致可分为二进制文件读取、文本文件读取。
二进制的文件读取我们以后有机会再说下。这次先学习下文本文件的读取。
读取又可以分为字节读取、按行读取、和一次性读取。
下面我们先来看下按字节读取
// 引入包
import java.io.File;
// 引入文件内容操作包
import java.io.FileInputStream;
import java.io.InputStreamReader;
// 引入异常类
import java.io.IOException;
// 字节流
import java.io.Reader;
public class HelloWorld{
// 入口
public static void main(String []args) throws IOException {
// 设置A文件路径
String path = "demo"+File.separator+"A2.log";
// 设置路径
File file = new File(path);
//以字符为单位读取文件
Reader read = null;
try {
// 一次读一个字符
read = new InputStreamReader(new FileInputStream(file));
int tempchar;
while((tempchar=read.read())!=-1) {
//在Windows下,rn这两个字符在一起时,表示一个换行。
//但如果这两个字符分开显示,会换两次行。
//因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。
if(((char)tempchar)!='r') {
//只要是不换行就读取
System.out.print((char)tempchar);
}
}
// 关闭文件流
read.close();
} catch(Exception e) {
e.printStackTrace();
} finally {
//内容总执行
if (read != null) {
try {
// 这一步判断,牛逼
read.close(); //确保关闭
}catch (IOException el) {
}
}
}
}
}
按行读取
// 引入包
import java.io.File;
// 引入异常类
import java.io.IOException;
// 引入操作相关类
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class HelloWorld{
// 入口
public static void main(String []args) throws IOException {
// 设置A文件路径
String path = "demo"+File.separator+"A2.log";
// 分配一个新的字节缓冲区。
ByteBuffer rbuf = ByteBuffer.allocate(1024);
// 创建path文件的文件字节输入流
FileInputStream fileInputStream = new FileInputStream(path);
// 获取通道
FileChannel fileChannel = fileInputStream.getChannel();
// 获取此通道文件的当前大小,作为文件结束位置
long endIndex = fileChannel.size();
// 当前处理字节所在位置
long endLineIndex = 0;
// 用于判断数据是否读取完
boolean isEnd = false;
// 换行符,目前需手动指定
int CF = System.lineSeparator().getBytes()[0];
// 设置字符串编码
String encoding = "utf-8";
// 循环读取通道中的数据并放入rbuf中
byte[] temp = new byte[0];
while (fileChannel.read(rbuf) != -1) {
// 创建与rbuf容量一样大的数组
byte[] rbyte = new byte[rbuf.position()];
// 读/写指针position指到缓冲区头部,并设置了最大读取长度
rbuf.flip();
// 将rbuf中的数据传输到rbyte中
rbuf.get(rbyte);
// 每行的起始位下标,相当于当前所读取到的byte数组
int startNum = 0;
// 循环读取rbyte,判断是否有换行符
for (int i = 0; i<rbyte.length; i++) {
endLineIndex++;
// 当存在换行符时
if (rbyte[i]== CF) {
// 创建临时数组用于保存整行数据
byte[] line = new byte[temp.length + i - startNum +1];
// 将上次读取剩下的部分存入line
System.arraycopy(temp, 0, line, 0, temp.length);
// 将读取到的当前rbyte中的数据追加到line
System.arraycopy(rbyte,startNum, line, temp.length, i- startNum +1);
// 更新下一行起始位置
startNum = i + 1;
// 初始化temp数组
temp = new byte[0];
// 处理数据,此时line即为要处理的一整行数据
String lineStr = new String(line, encoding);
// 抓到每行的内容啦
System.out.print(lineStr);
}
}
rbuf.clear();
}
// 关闭通道
fileChannel.close();
}
}
一次性读取
// 引入包
import java.io.File;
// 引入异常类
import java.io.FileInputStream;
import java.io.IOException;
public class HelloWorld{
// 入口
public static void main(String []args) throws IOException {
// 设置文件路径
String path = "demo"+File.separator+"A2.log";
// 设置编码
String encoding = "UTF-8";
// 打开操作
File file = new File(path);
// 内容长度
Long filelength = file.length();
// 一次性创建一个大数组
byte[] filecontent = new byte[filelength.intValue()];
try {
// 直接打开文件
FileInputStream in = new FileInputStream(file);
// 所有内容全部刷入
in.read(filecontent);
// 关闭文件流
in.close();
// 转成字符串
String txt = new String(filecontent, encoding);
System.out.print(txt);
} catch (IOException e) {
e.printStackTrace();
}
}
}
10.文件的其他操作
// 引入包
import java.io.File;
import java.text.SimpleDateFormat;
public class HelloWorld{
// 入口
public static void main(String []args){
// 设置文件路径
String path = "demo"+File.separator+"A2.log";
// 设置路径
File file = new File(path);
// 获取文件大小
System.out.println("读取文件大小"+file.length()+"byte");
// 获取文件修改时间
long lastModified = file.lastModified();
SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
System.out.println("修改时间"+ dateFormat.format(lastModified));
// 获取文件名称
// 这是路径截取的方法
String fileNameNow = path.substring(path.lastIndexOf("\\")+1);
// 这是file实例拿到的
String fileName = file.getName();
System.out.println("获取文件名称"+ fileName+" OR "+fileNameNow);
// 获取文件后缀
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
System.out.println("获取文件后缀"+ suffix);
// 是否隐藏文件
System.out.println("判断文件是否被隐藏"+file.isHidden());
}
}