什么是IO流
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class Main{
public static void main(String[] args) throws IOException {
/*什么是IO流,以及它的作用:
I:input;
O:output;
通过IO,可以对硬盘(外存)进行读与写。
流的种类:
1按字节(byte)进行读取,一次读取一个字节,也就是一次读取8个二进制位,(8bit);
------可以读取任何文件,音频,文本等等
2按字符读取:一次一个字符,只能读纯文本文件(txt);
流所在的包
java.io.*;
以stream结尾都是字节流,以reader/writer结尾的是字符流
问:xxxstreamReader是什么流?是字符流,因为stream没有结尾,结尾的是Reader
flush:
输出流(输入流没有)都有的一个方法,可以将管道(硬盘到内存大概)里没输出完的数据,强行输出。
*/
FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
System.out.println(fi.read());
System.out.println(fi.read());
System.out.println(fi.read());
System.out.println(fi.read());
//就会一直往下读!
}
}
以上是一个输入流的用法
ol.txt文件里的是abcdefgl(随手打的)
输出的是字母的ASCII码
运行结果如下:
97
98
99
100
+++++++++++++++++++++++++++++++++++
用.read()迭代ol.txt文件,返回的是ASCII码
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class Main{
public static void main(String[] args) throws IOException {
FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
int k=0;
while((k=fi.read())!=-1){
System.out.println(k);
/*
**注意,不能写成
int k = fi.read();
while(k!=-1){
sout(k);
为什么呢:因为k会被赋予第一个character的值,这里是101。
然后它就一直在打印101了,因为101恒大于-1,它不能迭代变化了。**
*/
}
}
}
输出结果:
101
102
103
108
13
10
++++++++++++++++++++++++++++++++
利用***数组***输出ol.txt文件里的内容(数组所存储的内容),(这个文件的内容较前面被更改了一下)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class Main{
public static void main(String[] args) throws IOException {
FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
byte[] bytes = new byte[4];//定义一个数组
System.out.println(fi.read(bytes));//这里打印的是读了多少个字节。
System.out.println(fi.read(bytes));
System.out.println(fi.read(bytes));
System.out.println(fi.read(bytes));
System.out.println(new String(bytes));
}
}
把ol.txt文件内容改了一下:改成了abcdefghi,9个字母;
然后输出是:
4
4
1
-1
ifgh
数组一次存4个,然后有9个character,所以最后只存1个。最后没有了,是-1
存一个的时候,i把前一个的e覆盖掉,然后存入
所以是ifgh
+++++++++++++++++++++++++++++++++++++++
数组+while if输出文本的全部内容
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class Main {
public static void main(String[] args) throws IOException {
int k = 0;
FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
byte[] bytes = new byte[8];//定义一个数组
while (true) {//写一个死循环;
if ((k = fi.read(bytes)) == -1)
break;//**记住!!!跳出死循环,while if语句的常见操作**
System.out.print(new String(bytes, 0, k));
**//注意这里不能写println,他会自动给换行,破坏文本**
}
}
}
ol.txt里的内容已经被我换成代码了
这样就可以输出文本了
切记这个迭代格式
输出结果:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class Main {
public static void main(String[] args) throws IOException {
int k = 0;
FileInputStream fi = new FileInputStream(“D:\newfile\ol.txt”);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
fi.available(),获取剩余的没读取的字节个数。当没有进行任何读取时,返回的就是全部的字节数了。
利用这个可以new一个大的byte类型数组,将内容全部输出出去。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class Main {
public static void main(String[] args) throws IOException {
int k = 0;
FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
k=fi.available();//可以得知一共->剩下有多少个字节,也因为是字节流的原因!
//如果没有去读取,那么available就是你所获取的文本全部的字节数了!
//这一点和数组集合就可以很方便的打印文本了
System.out.println(k);
//int[] a = new int[k];error:咳咳,不是int类型
byte[] a = new byte[fi.available()];
fi.read(a);
//System.out.println(a);error:咳咳,返回的是地址;
System.out.println(new String(a));
//这次成功了
}
}
++++++++++++++++++++++++++++++++++++++++++++++++
skip方法
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class Main {
public static void main(String[] args) throws IOException {
int k = 0;
FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
fi.skip(9);
System.out.println(fi.read());
}
}
ol.txt里的内容1234567890
输出结果:
48
所以迭代直接跳过前9个,打印了0的ASCII码