package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
/**
- 文件的相关操作 包括
- 文件目录创建 文件创建 文件写入 文件读取 文件重命名 等
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class FileOperate {
//5.删除目录
public static void delDir(String path){
File dir=new File(path);
if(dir.exists()){
//list()方法是返回某个目录下的所有文件和目录的文件名,返回的是String数组
//listFies()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组
File[] tmp=dir.listFiles();
for(int i=0;i<tmp.length;i++){
if(tmp[i].isDirectory()){
delDir(path+"/"+tmp[i].getName());
}
else{
tmp[i].delete();
}
}
dir.delete();
}
}
//6.删除文件
public static void delFile(String path,String filename){
File file=new File(path+"/"+filename);
if(file.exists()&&file.isFile())
file.delete();
}
//7.文件重命名
public static void renameFile(String path,String oldname,String newname){
if(!oldname.equals(newname)){//新的文件名和以前文件名不同时,才有必要进行重命名
File oldfile=new File(path+"\\"+oldname+".txt");
File newfile=new File(path+"\\"+newname+".txt");
if(newfile.exists())//若在该目录下已经有一个文件和新文件名相同,则不允许重命名
System.out.println(newname+"已经存在!");
else{
oldfile.renameTo(newfile);
}
}
}
public static void main(String[] args) throws IOException {
//1 .目录的创建
//定义文件路径
String basepath=“D:\FileOperate”;
File dir=new File(basepath);
//判断 如果目录(path)不存在的话,创建目录 (path)dir.mkdir()
if(!dir.exists()){
dir.mkdir();
System.out.println("创建文件夹成功!");
}
//定义文件名
String fileName = "firstFile";
//path 为妳创建的文本文件的路径
String path=basepath+"\\"+fileName+".txt";
//创建文件存放的目录
File file=new File (path);
//如果文件不存在则创建文件
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
System.out.println(e.getMessage());
}
System.out.println("success create file,the file is"+path);
}
//3.1 FileWriter
String Data =" This content will append to the end of the file";
try {
//new FileWriter(file,true);这种方式会 保留现有的内容和附加在该文件的末尾的新内容,不会覆盖
FileWriter fileWriter=new FileWriter(path,true);
//\r\n实现换行
fileWriter.write(Data+"\r\n今天去哪玩啊?\r\n");
//刷新
fileWriter.flush();
//关闭资源
fileWriter.close();
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
}
//3.2.1 BufferedWriter写入文件
String Content="if you don't care,i will kill you";
try {
//创建一个字符缓冲流对象
//BufferedWriter bw=new BufferedWriter(new FileWriter(path)); 这种会覆盖前面的内容
//这种方式可以在文件内容后面追加内容不会覆盖
BufferedWriter BW=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path,true)));
//System.out.println(new FileWriter(path));
//写入数据
//bw.write(Content);
BW.write(Content);
//BufferedWriter中的换行实现,换行符也能实现
BW.newLine();
BW.write("天气\r\n");
BW.write("晴朗");
//输入数据完成后刷新
BW.flush();
//关闭资源
//br.close();
BW.close();
System.out.println("OK!");
//3.2.2 (在IO操作,利用BufferedReader和BufferedWriter效率会更高一点)
BufferedReader br=new BufferedReader(new FileReader(file));
String temp=null;
StringBuffer sb=new StringBuffer();
temp=br.readLine();
while(temp!=null){
sb.append(temp+" ");
temp=br.readLine();
}
String output=sb.toString();
System.out.println(output);
} catch (IOException e) {
e.printStackTrace();
}
//3.3
//3.3.1FileOutputStream写入文件
FileOutputStream fop=null;
String content="这是用文件输出流写入文件";
try {
//创建FileOutputStream.txt文件
file=new File(basepath+"\\"+"FileOutputStream.txt");
//创建FileInputStream类对象 FileOutputStream(file,true)加入参数true则后面添加的数据不会覆盖前面的数据
//FileOutputStream(file); 这种会覆盖原先数据
fop=new FileOutputStream(file,true);
//若文件不存在,创建文件
if (!file.exists()) {
file.createNewFile();
}
//将content数据转化为二进制数据,创建byte型数组
byte[] contentInBytes=content.getBytes();
//将数组的信息写到文件中
fop.write(contentInBytes);
//实现换行
fop.write("\r\n".getBytes());
//刷新
fop.flush();
//关闭流
fop.close();
System.out.println("FileOutputStream Done!");
//3.3.2读取文件信息
//创建FileInputStream类对象
FileInputStream inputStream=new FileInputStream(file);
//创建byte数组
byte[] readcontent=new byte[1024];
//从文件中读取信息
int i=inputStream.read(readcontent);
//输出文件中的信息
System.out.println(new String(readcontent,0,i));
//关闭流
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try{
if(fop!=null){
fop.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
//4.目录删除
//要利用File类的delete()方法删除目录时,必须保证该目录下没有文件或者子目录
//,否则删除失败,因此在实际应用中,我们要删除目录
//,必须利用递归删除该目录下的所有子目录和文件,然后再删除该目录。
//delDir(basepath); 删除basepath目录
//delDir(basepath);
//文件删除
//delFile(basepath,“firstFile.txt”);
//文件重命名
//renameFile(basepath, “firstfile”, “file”);
}
}