输入/输出
一、File类:
1、定义:java.io包下表示与平台无关的文件和目录。也就是说希望在程序中操作文件和目录,都可以通过File类来完成。
2、实例:
File file = new File("C:\\work\\gitdemo\\thirdTest\\b.txt"); try { //创建一个b.txt的文本文件 file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } //返回file对象的所表示的文件名 System.out.println(file.getName()); // b.txt //返回绝对路径(是一个File对象) System.out.println(file.getAbsoluteFile()); // C:\work\gitdemo\thirdTest\b.txt //返回file对象的所表示的绝对路径名(是一个String字符串) System.out.println(file.getAbsolutePath()); // C:\work\gitdemo\thirdTest\b.txt
3、常用的方法:
1、访问文件相关的方法; public String getName() // 返回由此抽象路径名表示的文件或目录的名称 public String getPath() // 将此抽象路径名转换为一个路径名字符串 public String getParent() // 返回此抽象路径名的父路径名的路径名字符串 public String getAbsolutePath() // 返回抽象路径名的绝对路径名字符串 public File getAbsoluteFile() // 返回抽象路径名的绝对路径 2、文件检测相关: public boolean exists() // 判断此抽象路径名表示的文件或目录是否存在 public boolean isFile() // 判断此抽象路径名表示的文件是否是一个标准文件 public boolean isDirectory() // 判断此抽象路径名表示的文件是否是一个目录 public boolean isAbsolute() // 判断此抽象路径名是否为绝对路径名 public boolean canRead() // 判断对应的文件或者目录是否可读 public boolean canWrite() // 判断对应的文件或者目录是否可写 3、获取常规文件信息: public long lastModified() // 返回文件的最后修改时间 public long length() // 返回文件的内容长度 4、文件操作相关方法: // 当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件 public boolean createNewFile() throws IOException public boolean delete() // 删除此抽象路径名表示的文件或目录 public void deleteOnExit() // 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录 5、目录操作的方法: public boolean mkdir() // 创建此抽象路径名指定的目录 public String[] list() // 返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组 public File[] listFiles() // 返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件
二、IO流:
1、IO流一些概念的理解:
IO流理解:在java中把不同的输入/输出源(键盘、文件、网络连接等)抽象为“流”(stream),java把所有传统的流类型都放在了java.io包中;
输入流:只能从中读取数据,不能向其写入数据;
输出流:只能向其中写入数据,不能从中读取数据;
输入输出是从程序运行的内存的角度来划分的,数据从内存到硬盘,通常称为输出流;
字节流:字节流操作的数据单元是8位的字节(1个字节);
字符流:字符流操作的数据单元是16位的字符(2个字节);
节点流:可以从/向一个特定的IO设备读/写数据的流,节点流也被称为低级流;
处理流:对于一个已存在的流进行连接或封装,通过封装后的流来实现数据的读/写功能,处理流也被称为高级流;
2、流的概念模型:
对于InputStream/Reader而言,它们把输入设备抽象成一个“水管”,这个水管里的每个“水滴”依次排列,
输入流使用隐式的记录指针来表示当前正准备从哪个“水滴”开始读取,每当程序从InputStream/Reader中
取出一个或者多个“水滴”后,记录指针自动向后移动。
对于OutputStream和Writer而言,它们同样把输出设备抽象成一个“水管”,只是这个水管里没有任何水滴,
当执行输出时,程序相当于依次把“水滴”放入水管中。
3、FileInputStream类实例:
public static void main(String[] args) throws IOException{ //创建字节输入流 FileInputStream file = new FileInputStream( "C:\\work\\gitdemo\\thirdTest\\b.txt"); //创建一个长度为1024的竹筒 byte [] bytes = new byte[1024]; //用于保存实际读取的字节数 int hasRead = 0; //使用循环来重复“取水”的过程 while ((hasRead = file.read(bytes)) > 0) { //取出“竹筒”中的水滴(字节),将字节数组转换成字符串输入 System.out.println(new String(bytes,0,hasRead)); //System.out.println(new String(bytes, "UTF8")); } //关闭文件输入流、放在finally块里更安全 file.close(); }
4、OutInputStream类实例:
public static void main(String[] args) { try { //创建字节输入流 FileInputStream file = new FileInputStream( "C:\\work\\gitdemo\\thirdTest\\b.txt"); //创建字节输出流 FileOutputStream fos = new FileOutputStream("newFile.txt"); byte [] bytes = new byte[32]; int hasRead = 0; while ((hasRead = file.read(bytes)) > 0) { //每读取一次,即写入文件输出流,读了多好,就写多少 fos.write(bytes,0,hasRead); } } catch (IOException e) { //java7改写了所有的资源类,它们都实现了AutoCloseable接口,因此都可以通过自动关闭资源的try语句来关闭这些IO流。 e.printStackTrace(); } }
5、处理流使用实例:
public static void main(String[] args) { try { FileOutputStream fio = new FileOutputStream("bb.txt"); PrintStream ps = new PrintStream(fio); //输出字符串 ps.println("hello 艾白羊"); //输出对象 ps.println(new PrintStreamTetst()); } catch (FileNotFoundException e) { e.printStackTrace(); } }


浙公网安备 33010602011771号