Java的文件IO流操作方法

#### File
Java程序中用来表示文件对象或者文件夹对象的类


//使用File对象来描述一个文件
File f = new File("E:\\abc");  // E:\三生三世.OGG


//获取文件名
String name = f.getName();
//获取文件路径
String path = f.getPath();
//获取绝对路径
String absPath = f.getAbsolutePath();


boolean isFile = f.isFile();
System.out.println("是否是文件:"+isFile);
//检测文件是否存在
boolean r = f.exists();
文件操作


创建文件
boolean r = f.createNewFile();


创建文件夹(一级目录)
boolean r = f.mkdir();
创建文件夹(多级目录)
boolean r = f.mkdirs();
文件夹遍历

//遍历所有的文件(名称)
String[] names = f.list();


结合文件名过滤器遍历出满足条件的子文件/子文件夹
String[] names = f.list(new FilenameFilter() {

@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});


遍历子级文件/文件夹对象
File[] fs = f.listFiles();


根据文件名过滤
File[] fs = f.listFiles(new FilenameFilter() {

@Override
public boolean accept(File dir, String name) {
return name.endsWith(".avi") || name.endsWith(".mp4");
}
});


//根据文件对象来过滤
File[] fs = f.listFiles(new FileFilter() {


@Override
public boolean accept(File file) {
String name = file.getName();
return name.endsWith(".avi") || name.endsWith(".mp4");
}
});
文件删除


boolean isOk = f.delete()
//程序退出时删除
f.deleteOnExit();


文件夹删除,注意文件夹在删除时必须保证文件夹为空文件夹(没有子级)


重命名文件


boolean isOk = f.renameTo(nF);
注意如果新的文件(目标)和原来文件不在同一文件夹下,该方法实现了“剪切”功能


文件大小

long len = nF.length();
修改时间(毫秒数)-->可以使用SimpleDateFormat转换


long time = nF.lastModified();


SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sf.format(new Date(time));

System.out.println(s);

#### DataOutputStream & DataInputStream
原子类型(基本数据类型)输出流,辅助流(装饰者),辅助InputStream实现按原子类型输出,DataInputStream也一样,辅助原子类型输入


//写操作
DataOutputStream out = new DataOutputStream(
new FileOutputStream("E:\\abc\\data.txt"));
//输出内容(按类型)
out.writeInt(50);
out.writeBoolean(true);
out.writeUTF("你好abc");


//关闭
out.close();


//读操作(注意顺序要和写的顺序一致)
DataInputStream in = new DataInputStream(new FileInputStream("E:\\abc\\data.txt"));


//读内容
int a = in.readInt();
boolean b = in.readBoolean();
String str = in.readUTF();


//关闭
in.close();


#### 字符流
按字符的大小输入或者输出,输入用Reader的子类,输出用Writer子类


Reader r = new FileReader("E:\\abc\\123.txt");
//使用缓冲字符输入流
BufferedReader br = new BufferedReader(r);
//读取内容(普通的读取方式,一次一个字符)
int content;
while((content = br.read())!=-1){
System.out.print((char)content);
}


基于缓冲读取(可以按行来读取)


String str ;
while((str = br.readLine())!=null){
System.out.println(str);
}


关闭流


r.close();
br.close();
##### 字符输出流


Writer w = new FileWriter("E:\\abc\\www.txt");

如果要在原来的基础上添加内容那么可以在构造时添加append变量值为true
Writer w = new FileWriter("E:\\abc\\www.txt",true);


//加上缓冲输出
BufferedWriter bw = new BufferedWriter(w);


//写内容到磁盘
bw.write("你好你好阿大使大赛肯德基阿萨德");


//缓冲流关闭之前要flush
bw.flush();

//关闭
bw.close();
w.close();
#### 流关系


字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
用他们的子类:FileInputStream,FileOutputStream,FileReader,FileWriter


缓冲流


字节 字符
输入 BufferedInputStream BufferedReader
输出 BufferedOutputStream BufferedWriter
##### RandomAccessFile
随机存取的二进制文件


//构造的第二参数表示操作的模式,r表示读 w表示写 
RandomAccessFile ra = new RandomAccessFile(new File("E:\\abc\\ra.txt"),"rw");


//设置大小为2k
ra.setLength(2048);


ra.writeInt(500);
ra.writeUTF("你好");
//从1k的位置开始写
ra.seek(1024);
ra.writeUTF("abc");


#### Properties
键值对存取文件(一般可以用作一些配置文件)


读:

FileInputStream in = new FileInputStream("E:\\abc\\config.ini");
//创建Properties
Properties p = new Properties();
//加载文件
p.load(in);
//按键取值
String color = p.getProperty("color");
//带默认值的读取
String abc = p.getProperty("abc", "默认值"); 
String fontSizeStr = p.getProperty("fontSize");


//关闭流
in.close();


写:


//输出流关联要写到的文件
FileOutputStream out = new FileOutputStream("E:\\abc\\config.ini");
Properties p = new Properties();

//设置要保存的属性(键值对)
p.setProperty("fontSize", "2000");
p.setProperty("color", "blue");
p.setProperty("mode", "night");
p.setProperty("menuType", "right");
//保存
p.store(out, "122222");


//关闭流
out.flush();
out.close();
注意:修改内容不覆盖原来的内容一定要先用输入流加载文件到Properties中,关闭输入流之后修改再保存,如:


FileInputStream in = new FileInputStream("E:\\abc\\config.ini");
//创建Properties
Properties p = new Properties();
//加载文件
p.load(in);
in.close();  //修改之前关闭

//设置要保存的属性(键值对)
p.setProperty("fontSize", "20");
p.setProperty("color", "red");
FileOutputStream out = new FileOutputStream("E:\\abc\\config.ini");
//保存
p.store(out, "aaaaaa");

out.flush();
out.close();


#### PrintWriter


//创建打印机对象,第二个参数autoFlush可以省略,加上为true的意思是自动刷新缓冲区
PrintWriter pw = new PrintWriter(new FileOutputStream(
"E:\\abc\\print.txt"),true);
//输出内容(不换行)
pw.print("Hello123");


//换行输出
pw.println("你好abc");


//关闭
pw.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KM-人工智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值