本帖最后由 yuhaohong 于 2018-2-1 11:21 编辑
在java里,IO的为Input和Output的缩写,字面意思为输入和输出,意味着这是java程序对程序外输出数据和从程序外读取数据的操作 有人会问到,为什么java程序需要进行输入数据或者输出数据呢?这个问题很好解答,因为如果所有的数据都是程序自己产生,这样我们的程序开发就很复杂,比如我们要开发一个天气信息推送系统,我们不可能自己购买一整套气象设备收集信息,然后再推送到客户端,这样一来成本太高,二来开发周期太长,最方便的方法是:直接从气象局获取数据 这样就遇到一个问题了,我把气象局的数据拿到了,怎么把它们放到我们的程序里让数据成为我的呢?这就需要通过输入(Input)来把数据导入。数据导入了,我们需要通过整理,把必须的,客户关心的数据推送到客户端,这也需要把我们的数据输出(Output)。 以上就是IO的作用,获取数据和输出数据 下面我们先写一个小Demo,通过Java操作一个文件 [Java] 纯文本查看 复制代码 public class Test01 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("HelloWorld.txt");
byte[] arr = new byte[11];
fis.read(arr, 0, arr.length);
fis.close();
String ret = new String(arr);
System.out.println(ret);
}
} - 通过简单的操作,我们成功读取了一个文件,但是这样有个问题,因为我们读取的是字符,我们刚刚用的是字节流操作文件,这样子不方便操作,我们换一个操作字符的IO流对象来重复刚刚的操作,同时加上判断,不限制读取长度,只要读完了就自动停止,ok看代码
[Java] 纯文本查看 复制代码 public class Test02 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("HelloWorld.txt");
StringBuilder sb = new StringBuilder();
int read = -1;
while ((read = fr.read()) != -1) {
sb.append((char)read);
}
fr.close();
String ret = sb.toString();
System.out.println(ret);
}
}
- 这样我们就可以更加方便的操作文本文件了,对于文本文件,这样子操作程序员们感觉,好事有点麻烦,一次读一个,我可不可以一次读多几个,完全ok,下面我们试试,来个快一点的
[Java] 纯文本查看 复制代码 public class Test03 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("HelloWorld2.txt");
StringBuilder sb = new StringBuilder();
char[] arr = new char[1024];
int count = -1;
while ((count = fr.read(arr)) != -1) {
String str = new String(arr, 0, count);
sb.append(str);
}
fr.close();
String ret = sb.toString();
System.out.println(ret);
}
}
- 完全ok,通过数组,我们可以更加高效的读取数据,至于为什么高效,是因为我们一次读取一个数组的 长度,这样磁盘的来回读写次数就会大大较少
- 既然我们知道用数组,sun公司肯定也知道,他们于是给我们提供的高效的操作类Buffered,看效果
[Java] 纯文本查看 复制代码 public class Test04 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("HelloWorld2.txt");
BufferedReader br = new BufferedReader(fr);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\r\n");
}
br.close();
System.out.println(sb.toString());
}
}
|