java----文件操作
File基本使用
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {
public static void main(String[] args) {
//三种写法
//"C:/Users/zhengyan/Desktop/test"
//"C:\\Users\\zhengyan\\Desktop\\test"
//"C:"+File.separator+"Users"+File.separator+"zhengyan"+File.separator+"Desktop"+File.separator+"test"
File f1 = new File("C:\\Users\\zhengyan\\Desktop\\test");
File f2 = new File("C:\\Users\\zhengyan\\Desktop\\test\\t.js");
System.out.println(f1.isDirectory());//判断该目录是否是一个文件夹
System.out.println(f2.isFile()); //判断该目录是否是一个文件
File f3 = new File("C:\\Users\\zhengyan\\Desktop\\test11");
if(!f3.exists()){ //判断指定的目录是否存在(包括文件和目录)
try {
f3.createNewFile(); //创建文件
f3.mkdir(); //创建目录
} catch (IOException e) {
e.printStackTrace();
}
}else{
String[] name = f3.list(); //列出文件夹下的所有的文件(第一层)
File[] name1 = f3.listFiles(); //列出当前目录下的所有的文件;
File[] name2 = f3.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".txt");
}
}); //列出当前目录下的所有的(.txt)文件;
for(File i:name1){
System.out.println(i.getName()); //获取文件名
Date date = new Date(i.lastModified());
SimpleDateFormat simpledateformat = new SimpleDateFormat("HH:mm:ss");
System.out.println(simpledateformat.format(date));//文件的最后修改时间
}
f3.delete(); //删除一个文件夹,只能是空文件夹,才可以删除
}
File f4 = new File("C:\\Users\\zhengyan\\Desktop\\test");
f4.renameTo(new File("C:\\Users\\zhengyan\\Desktop\\new_test")); //重命名
f4.renameTo(new File("C:\\Users\\zhengyan\\new_test")); //移动文件
}
}
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
示例:递归所有某个目录下的指定扩展名的文件
import java.io.File;
public class Demo {
public static void main(String[] args) {
showfile("C:\\Users\\zhengyan\\Desktop\\test1","txt");
}
public static void showfile(String filepath,String ext){
File f = new File(filepath);
if(!f.exists()){
return;
}
else{
File[] file_list = f.listFiles();
for(File i:file_list){
if(i.isDirectory()){
showfile(i.getAbsolutePath(),ext);
}else{
if(i.getName().endsWith(ext)){
System.out.println(i.getName());
}
}
}
}
}
}
文件的读取和写入(字节流)
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Demo {
public static void main(String[] args) {
//文件写入
output("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt","你好\r\n");
//文件读出
input("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt");
}
//对程序来说,将程序中的数据往文件写入,叫输出流
public static void output(String filepath,String s){
File file = new File(filepath);
try {
//如果只能的目录中的文件不存在,会自动创建,如果目录不存在就会报错
// OutputStream out = new FileOutputStream(file);//需要捕获异常
OutputStream out = new FileOutputStream(file,true);//追加写入
out.write(s.getBytes());//需要捕获异常
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void input(String filepath){
byte[] bytes = new byte[1024];
StringBuilder strbuilder = new StringBuilder();
File file = new File(filepath);
try {
InputStream in = new FileInputStream(file);
int len = -1;
while((len=in.read(bytes))!=-1){ //从输入流读取一些字节数,并将它们存储到
//缓冲区 bytes中,并且返回读取的字节的大小,当返回值为-1,表明数据读取完毕
System.out.println(len);
strbuilder.append(new String(bytes,0,len));//从数组的起始位置,到len长度位置,截取,转成字符串,(否则会出现多出字符的情况)
}
in.close();
System.out.println(strbuilder);
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
文件的读取和写入(字符流)
package com.zy;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class Demo {
public static void main(String[] args) {
// write();
read();
}
public static void write(){
String pathfile = "C:/Users/zhengyan/Desktop/test1/x.txt";
File file = new File(pathfile);
try {
Writer out = new FileWriter(file);
out.write("你好,小明");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void read() {
String pathfile = "C:/Users/zhengyan/Desktop/test1/x.txt";
File file = new File(pathfile);
try {
Reader read = new FileReader(file);
char cr[] = new char[10];
StringBuilder strbuilder = new StringBuilder();
int len = -1;
while((len=read.read(cr))!=-1){
strbuilder.append(cr,0,len);
}
read.close();
System.out.println(strbuilder);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节操作流:每次执行写入会直接将数据写入文件;
字符操作流:执行完写入后,先将数据放入缓存区(1024字节),1.如果缓存区满了,会将数据吸入文件中,2.如果没有满,认为flush.将数据写入文件。3.执行close。会自动将数据写入文件。(字符流是基于字节流的)
示例:文件的复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Demo {
public static void main(String[] args) {
copy("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt","C:\\Users\\zhengyan\\Desktop\\test1\\1\\x.txt");
}
public static void copy(String old_path,String new_path){
File old_file = new File(old_path);
File new_file = new File(new_path);
InputStream file_read = null;
OutputStream file_write = null;
try {
file_read = new FileInputStream(old_file);
file_write = new FileOutputStream(new_file);
byte bytes[] = new byte[1024];
int len = -1;
while((len=file_read.read(bytes))!=-1){
file_write.write(bytes,0,len);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
file_read.close();
file_write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符流和字节流的转换
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
public class Demo {
public static void main(String[] args) throws IOException {
File file = new File("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt");
OutputStream out = new FileOutputStream(file);
write(out);
InputStream in = new FileInputStream(file);
read(in);
}
//将输入的字节流转换成输入的字符流
public static void read(InputStream in) throws IOException{
//输入流必须转换成输出流时指定的编码
Reader rd = new InputStreamReader(in,Charset.forName("gbk"));//将字节流转换成字符流;
//Reader rd = new InputStreamReader(in,Charset.forName(charsetName));//转换默认编码;
char cr[] = new char[1024];
StringBuilder str = new StringBuilder();
int len = -1;
while((len=rd.read(cr))!=-1){
str.append(new String(cr,0,len));
}
rd.close();
System.out.println(str);
}
//将输出字节流转换成输出字符流
public static void write(OutputStream out) throws IOException{
//输出流指定什么编码都可以;
Writer wr = new OutputStreamWriter(out,Charset.forName("gbk"));
wr.write("哈哈哈");
wr.close();
}
}
字节缓冲流 BufferedOutputStream
解决写入数据到文件过程中,频繁的操作文件;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Demo {
public static void main(String[] args) throws IOException {
bytewrite();
}
public static void bytewrite() throws IOException{
File file = new File("C:\\Users\\zhengyan\\Desktop\\test1\\x.txt");
OutputStream out = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(out); //默认缓冲大小8192字节,可以指定大小
bos.write("你好".getBytes());
bos.close();//直接关闭bos,会自动关闭out
}
}
更多精彩

