java输入输出是编程主题之一,对数据的读取以及文件的使用都是很常见的。Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
对流的理解:
流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
Java流的分类:
输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。
根据数据传输单位可分为:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
按功能分:
节点流: 用于直接操作目标设备的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能
说流之前还是先来看看文件吧,毕竟很多时候流操作的对象是文件。
1) 获取文件的基本属性方法:getName(),getParent(),getPath()来获取文件路径和文件名等等信息。
File f=new File("d:\\","file.txt");
System.out.println(f.getName());
System.out.println(f.getParent());
System.out.println(f.getPath());
用File类在d盘根目录下创建一个file.txt文件。分别获取该文件的名称、根目录、路由。
2)文件常见方法
isDirectory():判断文件对象是否是目录,返回布尔类型
exists():判断文件对象是否存在,返回布尔类型
createNewFile():创建文件
isFile():判断给定文件名是否为正常的文件,返回布尔
lastModified():返回表示此抽象路径名的文件的最后修改时间
length():测试文件长度
File f1=new File("d:\\filetest","1.txt");
File f2=new File("d:\\filetest","2.txt");
File f3=new File("d:\\filetest","3.txt");
try{
f1.createNewFile();
f2.createNewFile();
f3.createNewFile();
}catch(Exception e) {
}
3)输入流的使用
File f=new File("C:\\Users\\Administrator\\Desktop\\filetest\\file.txt");
FileInputStream fis = new FileInputStream(f);
char ch;
for (int i = 0; i < f.length(); i++) {
ch = (char) fis.read();
System.out.print(ch);
}
fis.close();
分析上面的代码段:首先是在桌面创建了一个file.txt的文件 ,接着创建输入流对象fis,实现的功能是循环输出文件里面的字符。最后别忘了要用close()关闭输入流。另外需要注意的是使用文件流需要抛出异常。
4)文件输出流
File f=new File("C:\\Users\\Administrator\\Desktop\\filetest\\file.txt");
FileOutputStream fos=new FileOutputStream(f);
for(int i='a';i<='z';i++)
{
fos.write(i);
fos.write(' ');
}
fos.close();
与文件输入流创建过程基本一致,上例通过创建文件输出流将a~z26个小写字母写进文件里面。
5) 用文件读写方式实现简单的复制功能。即从一个文件里面读,再写到另外一个文件。
File f=new File("d:\\filetest\\file.txt");
File f1=new File("d:\\filetest\\file2.txt");
FileInputStream fis=new FileInputStream(f);
FileOutputStream fos=new FileOutputStream(f1);
byte[] b=new byte[(int)f.length()];
fis.read(b);
for(int i=0;i<f.length();i++)
{
fos.write(b[i]);
}
fis.close();
fos.close();
以上代码中创建了一个字节型数组,数组大小就是已知文件长度。可以通过read操作一次性读取整个数组的所有数据,再用for循环写进已经创建好的文件中就可以。