Day11:JAVA IO下
Posted Layman52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day11:JAVA IO下相关的知识,希望对你有一定的参考价值。
字符流复制文件
FileReader fr = new FileReader("D:\\\\a.txt");
FileWriter fw = new FileWriter("D:\\\\b.txt");
int data=0;
while((data=fr.read())!=-1){
fw.write(data);
fw.flush();
}
fr.close();
fw.close();
字符缓冲流
BufferedReader、BufferedWriter
-
高效读写
-
支持输入换行符
-
可一次写一行、读一行
BufferedReader
read()
readLine()
BufferedWriter
write()
newLine() //写入一个行分隔符,实际上是兼容了各种系统的换行转义字符
flush()
打印流
PrintStream、PrintWriter
-
支持数据原样打印
PrintWriter
filush()
各种print、println和write方法
转换流
也称为桥转换流:InputStreamReader/OutputStreamWriter
-
可将字节流转换为字符流
-
可设置字符的编码方式
InputStreamReader父类为Reader
InputStreamReader
字节转换成字符
InputStreamReader(InputStream is[,String charset])
getEncoding()
read()
close()
OutputStreamWriter
字符转换成字节
OutputStreamWriter(OutputStream os[,String charset])
flush()
close()
write()
File类
概念:代表物理盘符中的一个文件或者文件夹
方法
-
createNewFile() //创建一个新文件
-
mkdir() //创建一个新目录
-
delete() //删除文件或空目录
-
exists() //判断File对象所代表的对象是否存在
-
getAbsolutePath() //获取文件绝对路径
-
getName() //取得名字
-
getParent() //获取文件或目录所在的目录
-
isDirectory() //是否是目录
-
isFile() //是否是文件
-
length() //获取文件的长度
-
listFiles() //列出目录中的所有内容
-
renameTo() //修改文件名为
使用
路径分隔符:
File.pathSeparator
文件名\\目录分隔符:
File.separator
构造方法:
File(String fileLocationName)
创建文件:(已存在则不创建)
File file = new File("D:\\\\a.txt");
if(!file.exists())
file.createNewFile();
删除文件:
file.delete();
//使用jvm退出时再删除
file.deleteOnExit();
创建文件夹:
File files = new File("D:\\\\aa\\\\bb\\\\cc");
if(!file.exists())
//files.mkdir(); //只能创建单级目录
files.mkdirs(); //创建多级目录
删除目录:
files.delete(); //只能删除最底层的空目录,deleteOnExit也一样
//获取名字
files.getName(); //只能获取最底层的文件夹名字
//遍历文件夹
files.list(); //获取该目录下的所有文件的名字String[]
files.listFiles(); //获取该目录下的所有文件File[]
FileFilter接口
public interface FileFilter
-
boolean accept(File pathName)
-
当调用File类中的listFiles()方法时,支持传入FileFilter接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFiles()的返回值中
//使用
File[] dir = files.listFiles(new FileFilter(){
@Override
public boolean accept(File pathName){
if(pathName.getName.endWiths(".jpg")){
return true;
}
return false;
}
})
递归遍历文件夹与递归删除文件夹
遍历:
public static void listDir(File file){
File[] files = file.listFiles();
System.out.println(file.getAbsolutePath());
if(files!=null&&files.length>0){
for(File f:files){
if(f.isDirectory()){
listDir(f);
}else{
System.out.println(f.getName());
}
}
}
}
删除:
//递归删除文件夹
public static void deleteDir(File file){
File[] files = file.listFiles();
System.out.println(file.getAbsolutePath());
if(files!=null&&files.length>0){
for(File f:files){
if(f.isDirectory()){
deleteDir(f);
}else{
System.out.println(f.delete());
}
}
}
file.delete();
}
Properties
继承自HashTable
-
存储属性名和属性值
-
键值都是字符串
-
没有泛型
-
和流有关
//方法
setProperty(String key,String value)
当添加了多个属性后,toString出来的是以下格式
{key1=value1,key2=value2,...}
getProperty(String key) //获取对应的value
Set<String> stringPropertyNames(); //获取properties的所有key
list(PrintWriter pw); //具体使用如下:
PrintWriter pw = new PrintWriter("D:\\\\print.txt");
Properties pro = new Properties();
pro.setProperty("name","QianJun");
pro.setProperty("age","25");
pro.list(pw);
pw.close();
store(OutputStream|Writer os|w,String name) //通常用于保存到配置文件里,如下:
FileOutputStream fos = new FileOutputStream("D:\\\\store.properties");
Properties pro = new Properties();
pro.setProperty("name","QianJun");
pro.setProperty("age","25");
pro.store(fos,"注释");
fos.close();
load(InputStream is) //从配置文件里加载,如下:
FileInputStream fis = new FileInputStream("D:\\\\store.properties");
Properties pro2 = new Properties();
pro2.load(fis);
System.out.println(pro2.toString());
fis.close();
UTF-8编码里一个字符为3个字节
main方法后也可以抛出异常,但不建议这样做
以上是关于Day11:JAVA IO下的主要内容,如果未能解决你的问题,请参考以下文章
java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段