Java.io包
Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
描述:通过数据流、序列化和文件系统提供系统输入和输出。
什么是流? 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
分类:
- 从流向上分:
- 输入流:程序可以从中读取数据的流。(磁盘→内存)
- 输出流:程序能向其中写入数据的流。(内存→磁盘)
- 从单位上分 :
- 字节流:以字节为单位传输数据的流
- 字符流:以字符为单位传输数据的流
- 缓冲流:缓冲流是对文件流处理的一种流
1.1 字节流
其中:字节输入流:InputStream,子类:FileInputStream
练习:读取一个txt文件:
public static void main(String[] args) throws IOException {
//实例化字节输入对象
FileInputStream fis = new FileInputStream("H:\\文档文件\\ubuntu-get.txt");
int count = 0;
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
while(fis.read(b)!=-1){ //读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
String str = new String(b);
sb.append(str);
count++;
}
System.out.println(sb.toString());
System.out.println(count);
//关闭资源
fis.close();
输出:(中文有乱码)// 读写文件, 以二进制读写, 有乱码, 是由于输入输出格式转换的原因
sudo add-apt-repository ppa:unbutu-toolchain-r/test
sudo apt-get update
apt-get upgrade //�������ļ���
apt-get dist-upgrade
sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu -tweak
1
1.2 字符流
以上代码由于是二进制写入,可能存在乱码,你可以使用以下代码实例来解决乱码问题:
其中
字符输出流:Writer,子类:OutputStreamWriter
字符输入流:Reader,子类:InputStreamReader
用字符输出流写入一个文件,再用输入流读出文件内容
实例:
public static void main(String[] args) throws IOException {
File f = new File("H:\\文档文件\\a.txt");
FileOutputStream fop = new FileOutputStream(f);
// 构建FileOutputStream对象,文件不存在会自动新建
OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
// 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
writer.append("中文输入");
writer.append("\r\n");//\r return,输入光标回到行的开头(回车) \n newline,换行
// 换行
writer.append("English");
writer.close(); // 关闭写入流
fop.close();// 关闭输出流,释放系统资源
FileInputStream fip = new FileInputStream(f);
InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
// 构建InputStreamReader对象,编码与写入相同
StringBuffer sb = new StringBuffer();
while (reader.ready()) {
sb.append((char) reader.read());
// 转成char加到StringBuffer对象中 read():读取单个字符
}
System.out.println(sb.toString());
reader.close(); // 关闭读取流
fip.close(); // 关闭输入流,释放系统资源
}
输出:
中文输入
English
1.3 缓冲流
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
缓冲输入流:BufferedReader
实例:
public static void main(String[] args) throws IOException {
//字节流对象
FileInputStream fis = new FileInputStream("H:\\文档文件\\a.txt");
//字符流对象
InputStreamReader isr = new InputStreamReader(fis);
//缓冲流对象
BufferedReader bufferedReader = new BufferedReader(isr);
//便捷方法
/*class FileReader extends InputStreamReader 构造方法:FileReader(File file)*/
//BufferedReader mybr = new BufferedReader(new FileReader("H:\\文档文件\\a.txt"));
String s ;
int i =0;
while ((s=bufferedReader.readLine())!=null){
System.out.println(s);
i++;
}
System.out.println(i);
//关闭资源
fis.close();
isr.close();
bufferedReader.close();
}
输出:
中文输入
English
第三行
3
缓冲输出流:BufferedWriter
public class BufferedWriter extends Writer
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
实例:
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("H:\\文档文件\\b.txt"));
bufferedWriter.write("这是write(String str);方法1");
bufferedWriter.newLine(); //写入一个行分隔符。
bufferedWriter.write("这是write(String str);方法2");
bufferedWriter.newLine();
//相当于
bufferedWriter.write("第一行\r\n第二行");
//关闭资源
bufferedWriter.close();
}
输出文件中内容:
b.txt
这是write(String str);方法1
这是write(String str);方法2
第一行
第二行