IO输入输出流学习笔记(第二篇)(JAVA)
来源:互联网 发布:php基本语法 编辑:程序博客网 时间:2024/06/10 19:39
一、摘要
本文继续上一篇IO文章继续介绍IO输入输出流的基础知识,读者可能发现对于前一篇IO文章的一些处理文件的类的操作有一些繁琐,并且代码结构不管怎么设计都显得有些复杂。接下来的文章目标就是介绍几个Java常用(新出)的一些类或工具类。不足之处请指正。
二、RandomAccessFile
RandomAccessFile类是Java输入/输出流体系中功能非常丰富的文件内容访问类,注意是文件内容,所以可是看出 RandomAccessFile类的最大局限就是只能读写文件,不能读写其他IO节点(eg:已经存在的流)。但是从类名也可以看出Random,字面理解是随机,也就是此类提供随机访问文件的功能,其实这里说的随机就是任意的意思,即提供任意读写文件,程序可以直接跳到文件的任意地方进行读写数据。并且RandomAccessFile对象包含了一个记录指针,可以自由地移动改记录指针。
RandomAccess有两个构造器,两个参数,一个是使用File参数指定文件本身,一个是mode参数。
mode参数包含四个值: 1. “r” 以只读的方式打开文件 2. “rw” 以读写的方式打开指定文件,如果文件不存在,则会创建文件。
3. “rws” 4. “rwd”
简单代码示例如下:
package Kobe;import java.io.*;public class RandomFileTest {public static void main(String[] args) {try {RandomAccessFile raf = new RandomAccessFile("E:/javastudy/eclipse/JZ/src/Kobe/RandomFileTest.java", "r");System.out.println("start:: " + raf.getFilePointer());raf.seek(260);byte[] bb = new byte[1024];while(raf.read(bb) > 0) {System.out.print(new String(bb, 0, 1024));}}catch(IOException ioe) {ioe.printStackTrace();}}}如上述代码所示,创建RandomAccessFile对象,构造器初始化,传入指定文件作为参数,“r”指定以只读方式打开文件,raf引用调用seek方法是RandomAccessFile类的方法,用于指定记录指针的位置。参数是260,即从260字节处开始输出文件内容。接下来的代码与原来的InputSream没有差别。
一下代码示范了如何向指定文件后追加内容,办法就是讲文件记录指针移动到文件的最后。代码如下
package Kobe;import java.io.*;public class AppendContent {public static void main(String[] args) {try {RandomAccessFile raf = new RandomAccessFile("E:/javastudy/eclipse/JZ/src/Kobe/outKobe.txt", "rw");raf.seek(raf.length());raf.write("append :".getBytes());}catch(IOException ioe) {ioe.printStackTrace();}try {//FileStream fs = new FileStream()FileInputStream fis = new FileInputStream("E:/javastudy/eclipse/JZ/src/Kobe/outKobe.txt");byte[] bbb = new byte[1024];while(fis.read(bbb) > 0) {System.out.println(new String(bbb, 0, 1024));}}catch(Exception e) {e.printStackTrace();}}}上述代码的第一个try语句的作用域内直接将文件指针移动到文件的最后(raf.length),然后开始讲文件中输出(追加)内容(append),第二个try-catch是为了将文件内容打印到屏幕上。每次运行一遍上述代码都会在文件的最后添加一个append字符串。
三、NIO.2
Java7对nio进行了很大的改进,全面支持文件io系统访问支持,本文介绍Files和Paths两个工具类。Files是一个操作文件的工具类,直接看代码:
package Kobe;import java.io.*;import java.nio.*;import java.nio.charset.Charset;import java.nio.file.Files;import java.nio.file.Paths;import java.util.*;public class FileTest {public static void main(String[] args) throws Exception {Files.copy(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java"), new FileOutputStream("E:/javastudy/eclipse/JZ/src/Kobe/zqw.txt"));System.out.println("jugging FileTest.java is Hidden? " + Files.isHidden(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java")));List<String> lines = Files.readAllLines(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java"), Charset.forName("gbk"));System.out.println(lines);System.out.println("文件大小为 " + Files.size(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java")));List<String> pom = new ArrayList();pom.add("世界那么大");pom.add("我想去看看");Files.write(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/nbnb.txt"), pom, Charset.forName("gbk"));}}上述代码是先FileTest.java文件内容copy到zqw.txt中,利用Files提供的readAllLines方法将文件每行都读出来存到List容器中并将List内容打印出来。Charset类是nio包提供的编解码类。再次创建一个动态数组即ArrayList,添加两个字符串进去,然后利用Paths.get方法指定文件,然后将ArrayList内容写入文件中。
以上内容是对JAVA文件io的工具类的基本介绍,望指教。
0 0
- IO输入输出流学习笔记(第二篇)(JAVA)
- python第二天学习笔记(输入输出IO)
- IO输入输出流学习笔记(第一篇)(JAVA)
- java IO输入输出流笔记
- Java IO输入输出流 笔记
- 第二十一篇:JAVA输入输出(IO)之字符流
- Java输入输出IO学习
- (黑马程序员)学习笔记,IO输入输出(字符流)
- (黑马程序员)学习笔记,IO输入输出(字节流)
- IO输入输出流的学习笔记
- JAVA输入输出流(IO)
- Java基础-IO-字节输入输出流(笔记)
- Java基础-IO-字符输入输出流(笔记)
- Java IO系统学习之各种输入输出流篇
- java之io类,输入输出流学习
- java学习笔记-输入输出流
- JAVA输入输出流学习笔记
- Java IO输入输出流
- cuda7.0 + caffe + ubuntu14.04(笔记本) 配置过程
- B实习编程·1
- BZOJ 3998 TJOI2015 弦论 后缀自动机
- Linux常用命令-文件处理命令-目录处理命令(下)
- 写了 windows RC 资源多语言string 替换的程序,发出来看下。
- IO输入输出流学习笔记(第二篇)(JAVA)
- LeetCode 10 Regular Expression Matching 正则匹配
- 按单词将句子逆序
- hdu-1796 How many integers can you find(容斥原理)
- NSDictionary存放整型
- AM335x—WM8960声卡驱动移植
- 编程之美7:字符串,那些你必须要会的事。
- 清除Xcode缓存
- 小希的迷宫