黑马程序员——IO流
来源:互联网 发布:玄学通软件下载 编辑:程序博客网 时间:2024/05/22 12:58
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1. File类
File:既可以表示文件,也可以表示(目录)文件夹。
(1)IO流
作用:用于处理不同设备间数据输入输出问题的。
分类:字节流、字符流
IO流操作的类都在IO包中。
(2)构造方法:
File(String pathname):根据指定的路径创建File对象。
File(String parent,String child):根据指定的父文件夹和子文件或者文件夹创建File对象
File(File parent,String child):根据指定的父文件夹对象和子文件或者文件夹创建File对象
(3)成员方法:
1、创建功能:
public boolean createNewFile() 如果指定的文件不存在,就创建;反之不创建
public boolean mkdir() 创建指定的目录,如果不存在,就创建
public boolean mkdirs()创建指定的目录,如果不存在,就创建。如果父目录不存在,它也会自动创建
绝对路径:以盘符开始的路径
相对路径:不以盘符开始的路径
2、删除功能:
public boolean delete():既可以删除文件,也可以删除文件夹,取决于使用的对象
注意:
A:如果你删除的目录下还有内容,必须先把目录下的内容删除完毕后,再删除目录
B:java语言的删除不走回收站
3、判断功能
public boolean exists() 判断file对象是否存在
public boolean isFile() 判断file对象是否是文件
public boolean isDirectory() 判断file对象是否是文件夹
public boolean isAbsolute() 判断file对象是否是绝对路径
public boolean canRead() 判断file对象是否可读
public boolean canWrite()判断file对象是否可写
public boolean isHidden()判断file对象是否隐藏
4、获取功能:
public StringgetAbsolutePath() 获取文件的绝对路径字符串
public StringgetPath() 获取相对路径
public StringgetName() 获取文件名称
public long length() 获取文件的大小,单位是字节
public long lastModified() 获取上次修改时间的毫秒值
public static File[] listRoots() 列出可用的系统文件根目录(盘符)
public String[] list() 返回的是指定目录下所有文件或者文件夹的名称数组
public File[] listFiles() 返回的是指定目录下所有文件或者文件夹对象数组
(4)案例:
获取指定目录下所有文件的名称
package com.file;import java.io.File;import java.io.FilenameFilter;public class GetFileListTest {public static void main(String[] args) {// 创建文件对象File file = new File("d:\\");File[] f = file.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File file2 = new File(dir + name);return file2.isFile() && name.endsWith(".txt");}});// 遍历for (File ff : f) {System.out.println(ff);}}}
(4)FileWriter写入数据
1、 步骤:
A:创建字符输出流对象
B:调用写入数据方法
C:刷新缓冲区
D:释放资源
2、 代码体现:
FileWriter fw = new FileWriter("a.txt");
fw.write("hello,io");
fw.flush();
fw.close();
3、问题?
A:创建字符输出流对象做了几件事情?
a:调用系统功能创建文件
b:创建字符输出流对象
c:将字符输出流对象指向对应的文件
注意:FileWriter fw = new FileWriter("a.txt");
这一步创建构造方法时,如果这个文件不存在会自动创建.而 File 类的构造方法不会自动创建,自能 用 createNewFile()方法创建。
B:为什么 FileWriter 没没有无参构造方法?
因为 FileWriter 是输出流写数据,既然输出数据要明确数据写到哪里。
B:写数据完毕后,为什么要刷新?
C:为什么要close()?( close() 先刷新,再关闭 )
1:让流对象变成垃圾
2:通知系统去释放和文件相关的资源
D:flush()和close()的区别?
flush():只刷新缓冲区,流对象还可以继续使用。
close():先刷新缓冲区,再关闭流对象。流对象不可以继续被使用。
E:怎么实现数据换行?
给出换行符
windows:\r\n
linu:\n
mac:\r
F:数据每次都把以前的覆盖了,要怎么实现数据追加写入?
构造时用带两个参数的
public FileWriter(String fileName,true){}
(3)FileReader读取数据
1、步骤:
A:创建字符输入流对象
B:调用读取数据方法,并显示
C:释放资源
2、FlieReader类下方法
public int read()
如果能读取到数据,它就会把这个数据的值拿到编码表中去找对应的值,
并把值返回 ,如果读取不到数据那么它就会返回-1.
返回值类型 int
public int read(char[] cbuf)
每次读取一个字符数组
(字符数组的长度一般定义为1024的整数倍)
2、代码体现:
FileReader fr = new FileReader("a.txt");
//方式1
//一次读取一个字符
int ch = 0;
while((ch=fr.read())!=-1)
{
System.out.print((char)ch);
}
//方式2
//一次读取一个字符数组
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1)
{
System.out.print(new String(chs,0,len));
}
fr.close();
2、IO流
(1)分类
1、 字节流:
输入流:
A.InputStream(抽象类)
int read()
int read(byte[] bys)
B.FileInputStream(常用基本流)
C.BufferedInputStream
输出流:
A. OutputStream(抽象类)
write(int by)
write(byte[] bys,int index,int len)
B.FileOutputStream(常用基本流)
C.BufferedOutputStream
2、字符流:
输入流:
A.Reader(抽象类)
int read()
int read(char[] chs)
B. FileReader(常用基本流)
C.BufferedReader
String readLine()
输出流:
A.Writer(抽象类)
write(int ch)
write(char[] chs,int index,int len)
B.FileWriter(常用基本流)
C.BufferedWriter
write(String line)
void newLine()
(2)到底使用谁
用记事本打开能读懂的,就用字符流。
否则,用字节流。
如果你根本就不知道,用字节流。
(3)复制文本文件
9种方式:
字节流:
4种
基本流一次读写一个字节
基本流一次读写一个字节数组
高效流一次读写一个字节
高效流一次读写一个字节数组
字符流:
5种
基本流一次读写一个字符
基本流一次读写一个字符数组
高效流一次读写一个字符
高效流一次读写一个字符数组
高效流一次读写一个字符串
一般来说,明明知道是文本文件,那么,肯定不用字节流。
那么,如果是使用字符流,有5种方式,选择哪一种呢?
一般都选择高效流读写一个字符串的方式。
(4)复制二进制流数据:(图片,视频,音频等)
字节流:
4种
基本流一次读写一个字节
基本流一次读写一个字节数组
高效流一次读写一个字节
高效流一次读写一个字节数组
一般来说,我们选择使用高效流一次读写一个字节数组
(4)案例:
1、 复制文本文件, 将文件从数据源复制到目的地
package com.io;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/** * 复制文件工具类 * */public class Copys {private Copys() {}public static void copyFile(String src, String dest) throws IOException {// 数据源BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));// 目的地BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));// 读写byte[] by = new byte[1024];int len = 0;while ((len = bis.read()) != -1) {bos.write(by, 0, len);bos.flush();}// 关闭bos.close();bis.close();}}
2、将D盘 b.mp3 复制到项目下
package com.io;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/* * 异常标准类 * 将D盘 mp3 复制到项目下 */public class BufferedException {public static void main(String[] args) {BufferedInputStream bis = null;BufferedOutputStream bos = null;try {// 数据源bis = new BufferedInputStream(new FileInputStream("d:\\b.mp3"));// 目的地bos = new BufferedOutputStream(new FileOutputStream("1.mp3"));// 读写byte[] bys = new byte[1024];int len = 0;while ((len = bis.read(bys)) != -1) {bos.write(bys);}} catch (IOException e) {e.printStackTrace();} finally {// 关闭if (bos != null) {try {bos.close();} catch (IOException e) {e.printStackTrace();}}if (bis != null) {try {bis.close();} catch (IOException e) {e.printStackTrace();}}}}}
3、将d:\\com文件夹中的 所有 .java文件改名为 .jad
package com.io;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.FilenameFilter;import java.io.IOException;/** * 将d:\\com文件夹中的 所有 .java文件改名为 .jad * * @author L * */public class ChangeName {public static void main(String[] args) throws IOException {// 获取文件夹下所有的java文件File oldFile = new File("d:\\com");File[] fileArray = oldFile.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return new File(dir, name).isFile() && name.endsWith(".java");}});// 创建目的文件夹File destFile = new File("d:\\jad");if (!destFile.exists()) {destFile.mkdir();}// 遍历java文件for (File file : fileArray) {// file -- d:\\com\\name.java// 结果 -- d:\\jad\\name.jadString name = file.getName();String newName = name.replace(".java", ".jad");// 数据源File src = new File(oldFile, name);BufferedReader br = new BufferedReader(new FileReader(src));// 目的地File dest = new File(destFile, newName);BufferedWriter bw = new BufferedWriter(new FileWriter(dest));// 读写String line = null;while ((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}// 关闭bw.close();br.close();}}}
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO
- 黑马程序员———IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——java IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 人脸检测之Haar分类器
- Ubuntu14.04 源码安装MJPG-Streamer及使用
- ACM练习的建议
- xquery 除法 和节点个数
- VS2015+Xamarin 打开Xaml报“Could not create the Java Virtual Machine” 解决方法
- 黑马程序员——IO流
- JavaScript快速掌握
- QGIS python开发手册--使用栅格图层
- KMP 算法
- caffe proto文件,和配置文件
- C/C++ 中struct嵌套的内存分配
- Linux学习记录(1)安装VirtualBox虚拟机
- linux下C++开发常用工具
- JUC 原子类