IO
Input 输入
Output输出
文件
new File(String 文件路径)
文件路径分隔符有/或者\,在其它操作系统可通过File.separator
获取分隔符
常用功能
判断功能 : isFile(),isDiretory(),exists()
创建目录 : mkdir(),mkdirs()
获取子目录和文件 : listFiles()
删除和重命名、移动等 : delete(),deleteOnExit(),renameTo()
相对路径
IO流
Input输入流:从文件读取内容
Output输出流: 向文件写入内容
字节流
以字节为单位操作数据
输入流是抽象类,需要子类,即:
FileInputStream : 文件输入流
FileOutputStream : 文件输出流
特点:流是单向的
读取步骤:
1)创建输入流对象
2)读取内容
3)关闭输入流
FileInputStream fis = new FileInputStream(new File("1.txt"));
System.out.println((char)read);
fis.close();
还可以一次读取多个字节
FileInputStream fis = new FileInputStream("1.txt");
byte[]byte = new byte[3];
//将读取的内容以每次三个字节填充到byte数组中,返回读到的字节总数
//若是返回的字节总数为-1,证明读取完毕,这常用于循环语句读取完毕跳出循环的条件
int len =fis.read(byte);
5行
输出步骤:
1)创建输出流对象
2)向输出流写入内容
3)关闭输出流
FileOutputStream fos = new FileOutputStream("2.txt");
fos.write(new byte[]{88,98,108});
fos.close();
复制步骤:
1)分别创建输入流和输出流对象
2)向输入流读取内容
3)向输出流写入内容
4)关闭输入流和输出流
注意事项:考虑文档不存在的情况造成的异常
public class DemoFileCopy2 {
public static void main(String[] args) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream("1.txt"));
bos = new BufferedOutputStream(new FileOutputStream("3.txt"));
while (true) {
byte[] buf = new byte[1024];
int len = bis.read(buf);
if (len == -1) {
break;
}
bos.write(buf, 0, len); // 实际读到len个字节,就写入len个字节
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(bis!=null) { // 不为null时才能关闭
try {
bis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(bos!=null) { // 不为null时才能关闭
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
字符流
以字符为单位处理流的内容
Reader字符输入流
Writer字符输出流
InputStreamReader 将字节流转为字符流
OutputStreamWriter 将字节流转为字符流
BufferedReader: 将行为单位处理字符流,与InputStreamReader同级
Bufferedwriter: 将行为单位处理字符流,与OutputStreamwriter同级
输入流步骤:
1)将字节流转换为字符流
2)读取
3)关闭外层的流
具体编码和字节输入流类似,不同之处主要就第一步
\\"utf-8" : 实际文件编码应与读取时的文件编码一致
InputStreamReader reader = new InputStreamReader(new FileInputStream("1.txt"), "utf-8");
......
reader.close();