IO流
IO流用来处理设备之间的数据传输,传输是通过流的方式
Java用于操作流的对象都在java.io包中
流就是指一连串流动的字符,以先进先出的方式发送信息的通道。
流的方式
按照流的方向划分
输入流:将外部数据源的数据转换成流,程序通过读取流中的数据,完成对数据源读取的访问
输出流:将流中的数据转换到对应的数据源中,程序通过向流中写入数据,完成对数据源写入
按照类型划分
字节流:以字节为单位(8位),可以访问所有文件
字符流:以字符为单位(16位Unicode),只能访问文本文件
输出流
比如我们经常使用的 System.out.println("cocci"); 就是将字符串输出到控制台中,或者说输出到屏幕中,这里的屏幕就是输出设备,由程序将cocci通过流输出到目的地。
输出设备除了屏幕,还有打印机、文件等。
输入流
比如使用键盘接收数据 Scanner sc = new Scanner(System.in); 这里的System.in就是输入流,程序从数据源这里指键盘去读取数据通过流输入到程序当中。
输入设备除了键盘,还有扫描仪、文件等。
File类
文件和目录路径名的抽象表示形式,表示磁盘上的文件或目录
文件:可认为是相关记录或放在一起的数据的集合
构造方法
示例:以下三种方式等价,各有不同的使用场景
//Windows中路径分隔可使用/或者\\
File file1 = new File("d:\\java\\a.txt");
File file2 = new File("d:\\java","a.txt");
File file3 = new File(new File("d:\\"),"java\\a.txt");
常用方法
注意事项
delete()方法在删除目录时如果其内有内容则无法删除,需要先清空目录下的内容,再删除目录本身
isDirectory()和isFile()方法在判断是否为文件或者目录时,如果文件或目录不存在则返回false
createNewFile()方法在创建文件时,如果文件所在的目录不存在则创建失败并抛出异常
String[] list()和 File[] listFiles() 都是返回对象包含的所有的文件和目录,返回类型不同
文件与目录的相关操作
public static void main(String[] args) {
/*目录的创建与删除*/
File file=new File("d:\\test\\java");
if(file.exists()){
System.out.println("目录存在,删除目录");
file.delete(); //只会删除一级目录,即java
}else{
boolean b=file.mkdirs(); //创建多级目录
System.out.println("创建文件目录结果:" + b);
}
/*文件的创建与删除*/
File file2=new File("d:\\test\\a.txt");
if(file2.exists()){
System.out.println("文件存在,删除文件");
file2.delete();
}else{
try {
file2.createNewFile(); //创建文件
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("创建文件");
}
//重命名,把a.txt重命名为b.txt
//file2.renameTo(new File("d:\\test\\b.txt"));
//把b.txt剪切到java目录下并重命名为c.txt
file2.renameTo(new File("d:\\test\\java\\c.txt"));
}
获取File对象的所有子文件和目录
public class TestFile {
public static void main(String[] args) {
//获取磁盘的所有根目录
File[] files =File.listRoots();