一
创建多级目录下的一个文件
public class FileDemo3 {
public static void main(String[] args) throws IOException{
File file = new File(
"a"+File.separator+
"b"+File.separator+
"c"+File.separator+
"d"+File.separator+
"e"+File.separator+
"f"+File.separator+
"g"+File.separator+
"h.txt"
);
/*
* 创建文件时,应首先判断当前文件所在的
* 目录是否存在,因为若不存在,会抛出
* 异常的。
*/
/*
* File getParentFile()
* 获取当前文件或目录所在的父目录
*/
File parent = file.getParentFile();
if(!parent.exists()){
parent.mkdirs();
}
if(!file.exists()){
file.createNewFile();
System.out.println("文件创建完毕");
}
}
}
使用字符流复制文本文件
public class CopyDemo {
public static void main(String[] args) throws IOException{
FileInputStream fis
= new FileInputStream(
"./src/day03/CopyDemo.java");
FileOutputStream fos
= new FileOutputStream(
"CopyDemo.java");
InputStreamReader isr
= new InputStreamReader(fis);
OutputStreamWriter osw
= new OutputStreamWriter(fos);
int d = -1;
while((d=isr.read())!=-1){
osw.write(d);
}
System.out.println("拷贝完毕");
isr.close();
osw.close();
}
}
一行一行读取文件
* PrintWriter
* 缓冲字符输出流,带有自动行刷新
* 可以以行为单位写出字符串
public class PrintWriterDemo {
public static void main(String[] args) throws IOException{
FileOutputStream fos
= new FileOutputStream("pw.txt");
OutputStreamWriter osw
= new OutputStreamWriter(
fos,"UTF-8");
/*
* 创建具有自动航刷新的PrintWriter
* 后,每当我们使用println方法写出
* 字符串后,都会自动flush
* 但一定要清楚:这无疑会增加写出次数
* 而降低写出效率
*/
PrintWriter pw
= new PrintWriter(osw,true);
pw.println("我爱北京天安门");
pw.println("快使用双节棍");
pw.close();
}
}
四
一行一行写入文件
* BufferedReader
* 缓冲字符输入流
* 可以以行为单位读取字符串
public class BufferReaderDemo {
public static void main(String[] args) throws IOException{
FileInputStream fis
= new FileInputStream("pw.txt");
InputStreamReader isr
= new InputStreamReader(
fis,"UTF-8");
BufferedReader br
= new BufferedReader(isr);
/*
* String readLine()
* 一次读取一行字符串,该方法会判断
* 读取到换行符为止,将之前的一行
* 字符串返回
* 若该方法返回的字符串为null,说明
* 没有数据可读了。
*/
String str = null;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
}
}