目录
1.File类
(1)常见构造方法
①File 变量名 = new File(String pathname);
②File 变量名 = new File(URI uri);
③File 变量名 = new File(String parent, String child);
④File 变量名 = new File(File parent, String child);
(2)常见方法
(3)例子
package test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "temp2" + File.separator + "a.txt");//File.separator代表文件中的斜线“\”
//相当于
File file2 = new File("D:\\temp2\\a.txt");
File file3 = new File("b.txt");
File parent = new File("D:\\temp2");
File file4 = new File(parent, "c.txt");
File file5 = new File("D:\\temp2", "d.txt");
if(!file2.exists()){//file2不存在
try {
parent.mkdir();//创建文件夹
file2.createNewFile();//创建file2文件
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(file3.getAbsolutePath());//输出绝对路径
File files = new File("D:\\temp2\\test\\a");
files.mkdirs();//创建多级目录
}
}
2.流的概念及API
(1)流的概念
- 流(Stream )的概念代表的是程序中数据的流通
- 数据流是一串连续不断的数据的集合
- 在Java程序中,对于数据的输入/输出操作是以流(Stream)的方式进行的
(2)流的分类
①按流的方向不同
输入流、输出流
②按处理数据的单位不同
字节流、字符流
③按功能不同
节点流、处理流
3.字节输入流
(1)InputStream常用的方法
(2)例子
读取“D:\temp2”目录下a.txt文件的内容
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamTest {
/** 一个一个字节读取 */
public static void method1(){
File directory = new File("D:\\temp2");
File file = new File(directory, "a.txt");
InputStream is = null;//创建字节输入流对象
try {
is = new FileInputStream(file);
System.out.println(is.read());
System.out.println(is.read());
System.out.println(is.read());
System.out.println(is.read());
System.out.println(is.read());
System.out.println(is.read());
System.out.println(is.read());
//............
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
is.close();//释放流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
/** 多个字节读取 */
public static void method2(){
File directory = new File("D:\\temp2");
File file = new File(directory, "a.txt");
InputStream is = null;//创建字节输入流对象
try {
is = new FileInputStream(file);
byte[] b = new byte[5];//开房间存放读取的数据,这是数据的中转站,也叫做缓冲区
int num = 0;//用于记录每次读取到的字节数量
while((num = is.read(b)) != -1){
System.out.println(new String(b, 0, num));//打印读到的结果
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
is.close();//释放流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
method1();
method2();
}
}
4.字节输出流
(1)OutputStream常用的方法
(2)例子
给“D:\temp2”目录下b.txt文件写入内容
package test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputSreamTest {
/** 一个一个字节写入b.txt */
public static void method1(){
File directory = new File("D:\\temp2");
File file = new File(directory, "b.txt");
OutputStream os = null;//创建字节输出流
try {
os = new FileOutputStream(file);
os.write(97);//a
os.write(98);//b
os.write(99);//c
os.write(100);//d
os.write(101);//e
//......
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
os.close();释放流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
/** 多个字节写入b.txt */
public static void method2(){
File directory = new File("D:\\temp2");
File file = new File(directory, "b.txt");
OutputStream os = null;//创建字节输出流
try {
os = new FileOutputStream(file);
byte[] b = new byte[]{'A', 'B', 'C', 'D', 'E'};
os.write(b);
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
os.close();释放流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
method1();
method2();
}
}
5.使用字节输入和字节输出流复制文件
将“D:\temp2\a.txt”文件的内容复制到“D:\temp2\b.txt”
package test;
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 CopyFileContent1 {
public static void main(String[] args) {
File directory = new File("D:\\temp2");
File src = new File(directory, "a.txt");// 源文件
File dest = new File(directory, "b.txt");// 目标文件
InputStream is = null;// 创建字节输入流对象
OutputStream os = null;// 创建字节输出流对象
try {
is = new FileInputStream(src);
os = new FileOutputStream(dest);
byte[] b = new byte[5];// 开房间存放读取的数据,这是数据的中转站,也叫做缓冲区
int num = 0;// 用于记录每次读取到的字节数量
while ((num = is.read(b)) != -1) {
os.write(b, 0, num);// 将从a.txt文件中读取到的字节写入b.txt
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();// 释放流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
6.字符输入流
(1)Reader常用的方法
(2)例子
读取“D:\temp2”目录下a.txt文件的内容
package test;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class ReaderTest {
/** 一个一个字符读取 */
public static void method1(){
File directory = new File("D:\\temp2");
File file = new File(directory, "a.txt");
Reader reader = null;
try {
reader = new FileReader(file);
System.out.println((char)reader.read());
System.out.println((char)reader.read());
System.out.println((char)reader.read());
System.out.println((char)reader.read());
System.out.println((char)reader.read());
//......
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
reader.close();//关闭字符流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
/** 多个字符读取 */
public static void method2(){
File directory = new File("D:\\temp2");
File file = new File(directory, "a.txt");
Reader reader = null;
try {
reader = new FileReader(file);
char[] cbuf = new char[5];
int num = 0;
while((num = reader.read(cbuf)) != -1){
System.out.println(new String(cbuf, 0, num));
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
reader.close();//关闭字符流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
method1();
method2();
}
}
7. 字符输出流
(1)Writer常用的方法
(2)例子
给“D:\temp2”目录下b.txt文件写入内容
package test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class WriterTest {
/** 一个一个字符写入 */
public static void method1(){
File directory = new File("D:\\temp2");
File file = new File(directory, "b.txt");
Writer writer = null;
try {
writer = new FileWriter(file);
writer.write(65);
writer.write(66);
writer.write(67);
writer.write(68);
writer.write(69);
writer.write(70);
//......
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
writer.close();//释放字符输出流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
/** 多个字符写入 */
public static void method2(){
File directory = new File("D:\\temp2");
File file = new File(directory, "b.txt");
Writer writer = null;
try {
writer = new FileWriter(file);
char[] cbuf = {'A', 'B', 'C', 'D', 'E', 'F'};
writer.write(cbuf);
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
writer.close();//释放字符输出流占用的资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
method1();
method2();
}
}
8.字符输入和字符输出流复制文件内容
将“D:\temp2\a.txt”文件的内容复制到“D:\temp2\b.txt”
package test;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class CopyFileContent2 {
public static void main(String[] args) {
File directory = new File("D:\\temp2");
File src = new File(directory, "a.txt");
File dest = new File(directory, "b.txt");
Reader reader = null;
Writer writer = null;
try {
reader = new FileReader(src);
writer = new FileWriter(dest);
char[] cbuf = new char[5];
int num = 0;
while((num = reader.read(cbuf)) != -1){
writer.write(cbuf, 0, num);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
reader.close();//关闭字符流占用的资源
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
9.使用处理流复制文件内容
package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class CopyFileContent3 {
public static void main(String[] args) {
File directory = new File("D:\\temp2");
File src = new File(directory, "a.txt");
File dest = new File(directory, "b.txt");
BufferedReader reader = null;// 创建缓冲字符输入流
BufferedWriter writer = null;// 创建缓冲字符输出流
Reader read = null;// 创建字符输入流
Writer write = null;// 创建字符输出流
try {
read = new FileReader(src);
write = new FileWriter(dest);
reader = new BufferedReader(read);
writer = new BufferedWriter(write);
int num = 0;
char[] cbuf = new char[5];
while ((num = reader.read(cbuf)) != -1) {
writer.write(cbuf, 0, num);
writer.flush();// 刷新
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
read.close();
reader.close();
write.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}