zoukankan      html  css  js  c++  java
  • Java IO学习--RandomAccessFile

    1、什么是 随机访问文件流 RandomAccessFile

    这个类在很多资料上翻译成中文都是:随机访问文件,在中文里,随机是具有不确定的含义,指一会访问这里,一会访问那里的意思。如果以这种语义来解释的话,就会感到很困惑。其实,Random在英文中不仅仅有随机,还有任意的意思。如果中文名为任意访问文件是不是就会更好的理解。任意表示我们可以指定文件中任何一个位置去操作一个文件。

    RandomAccessFile适用于大小已知的文件,能够随机的读取或者写入文件。可以通过使用seek()将记录从一处转移到另外一处,然后读取或者修改记录。文件中记录的大小不一定相同,只要我们能确定记录的大小和它们在文件的位置即可。

    2、RandowAccessFile存在的价值

    1、是JAVA I/O流体系中功能最丰富的文件内容访问类,它提供了众多方法来访问文件内容。

    2、由于可以自由访问文件的任意位置,所以如果需要访问文件的部分内容,RandomAccessFile将是更好的选择。

    3、可以用来访问保存数据记录的文件,文件的记录的大小不必相同,但是其大小和位置必须是可知的。

    3、RandomAccessFile的使用

     1 public class RandomFileDemo {
     2     
     3     public static void main(String[] args) {
     4         
     5         try {
     6             RandomAccessFile raf = new RandomAccessFile(new File("E:\a.txt"), "rw");
     7             long offset = raf.getFilePointer();//文件指针
     8             long len= raf.length();//当前文件的字节大小
     9             System.out.println("offset:"+offset+" len:"+len);
    10             //raf.seek(len);//移动到文件末尾,可进行追加文件内容
    11             System.out.println("offset:"+raf.getFilePointer()+" len:"+raf.length());
    12             raf.write(65);//1字节
    13             raf.writeChar(97);//2字节
    14             raf.writeChar('
    ');//2字节
    15             raf.writeBytes("test");//4字节
    16             System.out.println("offset:"+raf.getFilePointer()+" len:"+raf.length());
    17             
    18             
    19             raf.seek(0);//移动文件指针到开始位置
    20             int c = raf.read();
    21             System.out.println(c+"    "+(byte)c+"    "+(char)c);//从指定位置开始读取一个字节
    22             
    23             System.out.println(raf.readChar());//从文件指针(类似一个游标)位置开始读取一个字符(2个字节)
    24             //再次回到文件的开始位置,读取一行
    25             raf.seek(0);
    26             System.out.print(Arrays.toString(raf.readLine().getBytes())+"    ");
    27             System.out.println("offset:"+raf.getFilePointer()+" len:"+raf.length());
    28             raf.close();
    29             
    30             
    31             
    32             
    33         } catch (Exception e) {
    34             e.printStackTrace();
    35         }
    36         
    37     }
    38 
    39 }

    结果输出(a.txt是空文件):

    offset:0 len:0
    offset:0 len:0
    offset:9 len:9
    65    65    A
    a
    [65, 0, 97, 0]    offset:5 len:9

    4、进程控制和流

    在java程序中执行其他操作系统的程序,并且控制这些程序的输入和输出。主要要是借助流来读取程序的输出。如下:

     1 public class ProcessDemo {
     2     
     3     public static void main(String[] args) {
     4         
     5         try {
     6             Process process = Runtime.getRuntime().exec(new String[]{"cmd.exe","/C","dir"});
     7             
     8             BufferedReader br =new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
     9             
    10             BufferedReader br2 =new BufferedReader(new InputStreamReader(process.getErrorStream()));
    11             String line=null;
    12             String line2=null;
    13             while((line=br.readLine())!=null){
    14                 System.out.println(line);
    15             }
    16             while((line2=br2.readLine())!=null){
    17                 System.out.println(line2);
    18             }
    19             
    20             br.close();
    21             br2.close();
    22         } catch (IOException e) {
    23             e.printStackTrace();
    24         }
    25         
    26         
    27     }
    28 
    29 }

    输出结果:

    驱动器 F 中的卷没有标签。
     卷的序列号是 3A48-2555
    
     F:NewStudyWorkSpacecoder_java 的目录
    
    2018/03/19  19:31    <DIR>          .
    2018/03/19  19:31    <DIR>          ..
    2018/03/19  19:31             1,433 .classpath
    2018/03/19  19:31               562 .project
    2018/03/19  19:31    <DIR>          .settings
    2018/04/05  18:05               702 pom.xml
    2018/03/19  19:31    <DIR>          src
    2018/03/19  19:31    <DIR>          target
                   3 个文件          2,697 字节
                   5 个目录 341,102,870,528 可用字节
  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/liupiao/p/9297577.html
Copyright © 2011-2022 走看看