网站设置评价,南川集团网站建设,网页设计论文总结怎么写,建行app怎么注册登录文章目录Ⅰ. 文件 IO 的常用核心类#xff08;来自 java.io 包#xff09;Ⅱ. File 类题外话#xff1a;try-with-resources⭐Ⅲ. 字节流一、输入样例二、输出样例Ⅳ. 字符流一、输入样例二、输出样例Java IO 分为两个主要家族#xff1a;传统 IO#xff08;java.io 包IO 的常用核心类来自 java.io 包Ⅱ. File 类题外话try-with-resources⭐Ⅲ. 字节流一、输入样例二、输出样例Ⅳ. 字符流一、输入样例二、输出样例Java IO分为两个主要家族传统IOjava.io包基于流Stream数据一个字节(字符)一个字节(字符)地流动。适合较小数据量、阻塞式处理。NIONew IOjava.nio包基于缓冲区Buffer 和 通道Channel更高效、支持非阻塞 IO可用于高性能服务器适合大规模并发处理。这里主要介绍传统IO对于文件操作来说也主要用到的是传统IO而网络通信会用到NIO并且现在主流的框架已经集成了NIO所以不需要我们去调用NIO的原生API所以这里不重点展开学等到后面学框架的时候再学习时候使用即可Ⅰ. 文件IO的常用核心类来自java.io包类名类型功能File表示文件或目录不进行读写——FileInputStream / FileOutputStream字节流用于读写文件低级BufferedInputStream / BufferedOutputStream字节缓冲流加快读写速度包装在流外层FileReader / FileWriter字符流用于读写文本文件单字符读取低效BufferedReader / BufferedWriter字符缓冲流高效读写文本文件提供按行读取等功能InputStreamReader / OutputStreamWriter转换流字节流与字符流之间的桥梁ObjectInputStream / ObjectOutputStream对象流支持对象的序列化与反序列化注意事项其实因为FileReader和FileWriter的局限性比如不能指定编码、功能较弱、封装层少等所以一般处理字符流的时候用的是FileInputStream和FileOutputStream分别搭配上Scanner和PrintWriter即可Java IO使用装饰者模式Decorator允许你用更强功能 “包裹” 基础流如下所示// 字节流包裹BufferedInputStreaminnewBufferedInputStream(newFileInputStream(file.txt));// 字符流包裹BufferedReaderbrnewBufferedReader(newFileReader(test.txt))Ⅱ.File类File是java.io包中的一个核心类用于表示文件或目录的抽象路径名但它本身不进行文件内容读写而是用于检查、创建、删除、重命名文件和目录等 “元数据” 操作。方法 / 构造器返回类型说明File(String pathname)构造器通过路径字符串构造文件或目录File(String parent, String child)构造器使用父路径 子路径构造File(File parent, String child)构造器使用父 File 子路径构造exists()boolean路径是否存在isFile()boolean是否是普通文件isDirectory()boolean是否是目录createNewFile()boolean创建文件已存在时不创建mkdir()boolean创建目录单层mkdirs()boolean创建目录多层delete()boolean删除文件或空目录getName()String获取文件/目录名getPath()String返回构造File对象时传入的路径原样返回可能是相对路径getAbsolutePath()String获取绝对路径但不解析符号链接或目录符号getCanonicalPath()String获取绝对路径解析符号链接、.和..等等价于真实路径getParent()String获取父路径字符串length()long获取文件大小字节lastModified()long最后修改时间戳毫秒renameTo(File dest)boolean重命名或移动文件list()String[]返回目录下的文件名数组listFiles()File[]返回目录下的 File 对象数组canRead() / canWrite()boolean是否可读 / 可写setReadOnly()boolean设置为只读isHidden()boolean是否是隐藏文件举个例子假如当前路径是/home/user然后代码如下所示File filenewFile(../test.txt);System.out.println(getPath(): file.getPath());System.out.println(getAbsolutePath(): file.getAbsolutePath());System.out.println(getCanonicalPath(): file.getCanonicalPath());// 结果getPath():../test.txtgetAbsolutePath():/home/user/../test.txtgetCanonicalPath():/home/test.txt题外话try-with-resources⭐try-with-resources是Java 7引入的一种简洁语法结构用于自动关闭实现了AutoCloseable或Closeable接口的资源主要是确保资源在使用完毕后被自动关闭即使中间发生异常也不会泄露资源。传统写法有点累赘不优雅如下所示try{BufferedReaderreadernewBufferedReader(newFileReader(file.txt));Stringlinereader.readLine();System.out.println(line);}catch(IOExceptione){e.printStackTrace();}finally{if(reader!null){try{reader.close();}catch(IOExceptionex){ex.printStackTrace();}}}而try-with-resources写法如下所示try(BufferedReaderreadernewBufferedReader(newFileReader(file.txt))){Stringlinereader.readLine();System.out.println(line);}catch(IOExceptione){e.printStackTrace();}优势更简洁自动关闭资源省去了finally块在try中声明的资源编译器会自动生成finally代码块来调用它们的.close()方法。避免资源泄漏即使try里面发生异常Java保证所有资源都被依次、倒序地关闭。如果close()方法本身也抛出异常这些异常会被添加为抑制异常suppressed exceptions而不会吞掉原来的主异常。try中可以有多个语句需要用;分割即可Ⅲ. 字节流字节流主要用于处理二进制数据如图片、音频、视频、文件分别有输入字节流和输出字节流但它们都是抽象类需要通过特定功能的子类来创建实例我们重点放在文件相关的字节流类上抽象类子类示例InputStreamFileInputStream、BufferedInputStream、DataInputStream等等OutputStreamFileOutputStream、BufferedOutputStream、DataOutputStream等等下面是两者各自的方法以及共同的方法方法签名返回类型功能说明 FileInputStream 专属方法int read()int读取单个字节返回 0–255返回 -1 表示 EOFint read(byte[] b)int读取多个字节存入数组返回实际读取的字节数int read(byte[] b, int off, int len)int从偏移量 off 开始读取 len 个字节int available()int返回可读取的字节数非阻塞long skip(long n)long跳过 n 个字节返回实际跳过的字节数FileOutputStream 专属方法void write(int b)void写出一个字节仅低 8 位有效void write(byte[] b)void写出整个字节数组void write(byte[] b, int off, int len)void从偏移量off写出len个字节void flush()void强制刷新缓冲区将数据立即写入文件两者共有方法void close()void关闭流并释放系统资源FileDescriptor getFD()FileDescriptor获取底层文件描述符用于底层文件操作少用一、输入样例publicstaticvoidmain(String[]args){// try-with-resources风格try(InputStreaminnewFileInputStream(./main.txt)){byte[]bufnewbyte[1024];while(true){intnin.read(buf);// 磁盘数据读取到buf中if(n-1){System.out.println(读取完毕);break;}// 处理数据比如输出数据for(inti0;in;i){System.out.printf(0x%x\n,buf[i]);// 十六进制输出}}}catch(IOExceptione){e.printStackTrace();}}二、输出样例publicstaticvoidmain(String[]args){try(OutputStream outnewFileOutputStream(./main1.txt)){byte[]buf{97,98,99,100};out.write(buf);// 将buf数据写入到文件中去}catch(IOException e){e.printStackTrace();}}Ⅳ. 字符流这里主要采用的还是文件字节流加上Scanner、PrintWriter来处理字符这两者分别有以下优势Scanner可以轻松地读取int,double,String, 一行一行地处理文本nextLine()、nextInt()等还可以设置编码格式又因为它接受InputStream作为输入源所以能直接配合FileInputStream使用PrintWriter支持print(),println(),printf()等方法并且支持write(String)即可以传入String参数这种支持是非常爽的一、输入样例publicstaticvoidmain(String[]args){try(InputStreaminnewFileInputStream(./main.txt);Scanner scnewScanner(in,UTF-8)){// 循环读入每一行然后输出while(sc.hasNext()){String linesc.nextLine();System.out.println(line);}}catch(IOException e){e.printStackTrace();}}二、输出样例publicstaticvoidmain(String[]args){try(OutputStream outnewFileOutputStream(./main2.txt,UTF-8);PrintWriter pwnewPrintWriter(out)){// 将文本输出到文件中可以直接传String类型pw.write(啊啊~利刃啊liren\n利刃阿斯顿);}catch(IOException e){e.printStackTrace();}}