01 复习
文件夹删除
public class Demo01
{
public static void main(String[] args) {
deleteFile(new File("D:/abc"));
}
public static void deleteFile(File file){
if (file.isFile()){
file.delete();//删除文件
}
if (file.isDirectory()){
File[] files = file.listFiles();
for (File f : files) {
deleteFile(f);
}
file.delete();//删除文件夹
}
}
}
02 IO流常见流父类复习
顶级父类们
03输出流的使用步骤
输出流:顶层父类是OutputStream【抽象类】,借助其子类FileOutputStream学习
输出流的使用步骤:
1.创【创建流对象】
FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件。
public FileoutputStream(String name):创建文件输出流以指定的名称写入文件。
【如果原来文件存在数据,会清空,如果没有文件会创建一个】
2 写【调用写数据的方法】
write方法:
public void write(int b):写出一个字节
public void write(byte[] bytes):写出一个字节数组
public void write(byte[] bytes,int off,int len)
3:关【强调关流的方法】
public void close()
public class Demo2
{
public static void main(String[] args)throws IOException {
FileOutputStream fos=new FileOutputStream(new File("file01.txt"));
fos.write(98);
byte[] bytes ="abc我爱java".getBytes();
fos.write(bytes);
fos.write(bytes,0,2);
fos.close();
}
}
04 写出换行及文件数据追加功能
如果要完成文件数据追加续写
创建流时需要使用一下两个构造方法:
public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示的文件。
public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示的文件。
public FileOutputStream(String name,boolean append):创建文件输出流以指定的名称写入文件。
如果要完成文件数据的追加,append参数要设置为true
写出换行
\r\n
\r
\n
String ls=System.lineSeparator
06字节输入流的使用
输入流顶层父类是:InputStream【抽象类】可以使用FileInputStream
使用步骤:
1)创【创建输入流对象】
FileInputStream的构造方法
public FileInputStream(File file):关联要读取的文件
public FileInputStream(String filePath):关联要读取的文件路径
要求指定的文件,一定要存在,否则会报错
【FileNotFoundException】
2)读【读取数据】
read:
public int read():读取一个字节并返回,如果读取到末位,会返回-1
public int read(byte[] bytes):读取多个数据到字节数组,返回读取有效的字节个数,如果没有读到数据返回-1
3)关【关闭资源】
public void close()
07 文件的复制
低效复制:int read()void write()
/*
把dir1中文件beauty.jpg复制到dir2中去
思路:先把dir1中的beauty.jpg读取到内存,然后写入到dir2中的beauty.jpg
步骤:
1)创:【创建输入输出流】
2)读,写【边读边写】
3)关【关输入和输出流的资源】
public class Demo01{
publicstaticvoidmain(String[]args)throwsIOException{
longt1=System.currentTimeMillis();
//1)创:【创建输入输出流】
FileInputStreamfis=newFileInputStream("dir1/beauty.jpg");
FileOutputStreamfos=newFileOutputStream("dir2/beauty.jpg");
//2)读,写【边读边写】
intb;
while((b=fis.read())!=-1) {
fos.write(b);
}
//3)关【关输入和输出流的资源】 先开后关
fos.close();
fis.close();
longtimeCost=System.currentTimeMillis()-t1;
System.out.println("timeCost = "+timeCost);
}
}
高效的复制(int read(byte[] bytes) void write(byte[] bytes,int off,int len))
/*
把dir1中文件beauty.jpg复制到dir2中去
思路:先把dir1中的beauty.jpg读取到内存,然后写入到dir2中的beauty.jpg
步骤:
1)创:【创建输入输出流】
2)读,写【边读边写】
3)关【关输入和输出流的资源】
*/
public class Demo02 {
public static void main(String[] args) throws IOException {
long t1 = System.currentTimeMillis();
//1)创:【创建输入输出流】
FileInputStream fis = new FileInputStream("dir1/beauty.jpg");
FileOutputStream fos = new FileOutputStream("dir2/beauty5.jpg");
//2)读,写【边读边写】
int len;
byte[] bytes = new byte[1024*8];
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes,0,len); //写出有效数据
}
//3)关【关输入和输出流的资源】 先开后关
fos.close();
fis.close();
long timeCost = System.currentTimeMillis() - t1;
System.out.println("timeCost = " + timeCost);
}
}
08字符输入流的使用
字符的输入流:Reader【抽象类】,得其子类 FileReader
使用步骤:
1)创
FileReader的构造方法
- FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。
- FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。
如果文件不存在,会报错FileNotFoundException
2)读
read:
public int read():读取一个字符,如果读取到末位,返回-1
public int read(char[] chars) :读取有效的字符到字符数组,返回读取字符的有效个数,如果没有字符返回-1
3)关
public void close()
*/
public class Demo01{
public static void main(String[]args)throwsIOException{
//1:创
FileReaderfr=newFileReader("file05.txt");
//2:读
/* // public int read():读取一个字符,如果读取到末位,返回-1
int c;//保存读取的字符
while ((c = fr.read()) != -1) {
System.out.println((char)c);
}*/
// public int read(char[] chars) :读取有效的字符到字符数组,返回读取字符的有效个数,如果没有字符返回-1
intlen;
char[]chars=newchar[2];
while((len=fr.read(chars))!=-1) {
System.out.println(newString(chars,0,len));
}
//3:关
fr.close();
}
}
10字符的输出流使用
/*
字符输出流:Writer【抽象类】,得用其子类FileWriter
使用步骤:
1)创
FileWriter的构造方法
public FileWriter(File file): 关联一个文件用来保存写出的数据
public FileWriter(String filePath): 关联一个文件用来保存写出的数据
//如果append设置为true,具有数据追加拼接的功能
public FileWriter(File file ,boolean append): 关联一个文件用来保存写出的数据
public FileWriter(String filePath, boolean append): 关联一个文件用来保存写出的数据
2)写
write:
public void write(int c):写出一个字符
public void write(char[] chars):写出一个字符数组
public void write(char[] chars,int off,int len):写出一个字符数组中指定字符
public void write(String str):直接写出字符串
3)关
public void close()
*/
publicclassDemo01{
publicstaticvoidmain(String[]args)throwsIOException{
//1:创
FileWriterfw=newFileWriter("file06.txt");
//2:写
fw.write('A');//写出一个字符
char[]chars={'a','b','c'};
fw.write(chars);//写出一个字符数组
fw.write(chars,0,2);//写出字符数组中指定的字符
fw.write("HelloWorld");//写出字符串
fw.write("我爱Java",0,2);//写出字符串中指定的字符
//3:关
fw.close();
}
}
11 Properties属性类的使用
/*
Properties属性类,最终会实现Map,本质上就是Map特点就是保存键值对信息
用来存储:属性配置信息【键值对】
downloadPath=D:/download
1)创建对象
2)使用方法
- public Object setProperty(String key, String value) : 保存一对属性。 put
- public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。 get
- public Set<String> stringPropertyNames() :所有键的名称的集合。 keySet
从流中读取
- public void load(InputStream in): 从字节输入流中读取属性文件。
- public void load(Reader reader): 从字符流中读取属性文件
存入到流中
- public void store(OutputStream out,String comment): comment是注释
- public void store(Writer writer, String comment):
*/
publicclassDemo01{
publicstaticvoidmain(String[]args)throwsIOException{
Propertiespro=newProperties();
pro.setProperty("downloadPath1","D:/download");
pro.setProperty("downloadPath2","D:/music");
pro.setProperty("downloadPath3","D:/movie");
System.out.println("pro = "+pro);
StringaaaValue=pro.getProperty("aaa","没有配置信息");
System.out.println("aaaValue = "+aaaValue);
StringdownloadPath=pro.getProperty("downloadPath");
System.out.println("downloadPath = "+downloadPath);
Set<String>keySet=pro.stringPropertyNames();
System.out.println("keySet = "+keySet);
// 存入到流中:存储到指定的路径
//- public void store(OutputStream out,String comment): comment是注释
//- public void store(Writer writer, String comment):
pro.store(newFileWriter("downloadInfo.properties"),"this is comment");
}
}
/*
从流中读取
- public void load(InputStream in): 从字节输入流中读取属性文件。
- public void load(Reader reader): 从字符流中读取属性文件
*/
publicclassDemo02{
publicstaticvoidmain(String[]args)throwsIOException{
Propertiespro=newProperties();
System.out.println("pro = "+pro);
pro.load(newFileReader("downloadInfo.properties"));
System.out.println("pro = "+pro);
}
}