zoukankan      html  css  js  c++  java
  • 集合框架

    1 使用commons-io API输出一个目录中所有扩展名为.jar的文件

    使用commons-io API输出当前目录及其子目录下,所有扩展名为.jar的文件。

    参考答案

    实现此案例需要按照如下步骤进行。

    步骤一:构建测试方法

    首先,创建CommonsFile类,并在类中新建测试方法testListFiles,代码如下所示:

     
    1. import java.io.File;
    2. import java.io.IOException;
    3. import java.util.Collection;
    4. import org.apache.commons.io.FileUtils;
    5. import org.junit.Test;
    6. public class CommonsFile {
    7.     /**
    8.      *使用commons-io API输出一个目录中所有扩展名为.txt的文件
    9.      */
    10.     @Test
    11.     public void testListFiles() throws IOException{
    12.         
    13.     }
    14. }

    步骤二:获取当前目录下的扩展名为.jar的文件

    首先,使用File类构建表示当前目录的file对象;然后,使用File类的listFiles方法获取当前目录下的扩展名为.jar的文件;最后,遍历listFiles方法返回的数组查看当前目录下的内容,代码如下所示:

     
    1. import java.io.File;
    2. import java.io.IOException;
    3. import java.util.Collection;
    4. import org.apache.commons.io.FileUtils;
    5. import org.junit.Test;
    6. public class CommonsFile {
    7.     /**
    8.      *使用commons-io API输出一个目录中所有扩展名为.txt的文件
    9.      */
    10.     @Test
    11.     public void testListFiles() throws IOException{
    12.         File file = new File(".");
    13.         Collection<File> files=FileUtils.listFiles(file, new String[]{"jar"}, true);
    14.         for (File f : files) {
    15.             System.out.println(f);
    16.         }
    17.     }
    18. }

    此处使用了listFiles方法,该方法有三个参数,第一个参数表示要搜索的目录;第二参数表示扩展名的数组,例如: {"java","xml"},如果这个参数为null,那么将不进行过滤,返回的所有文件;第三个参数表示是否进行递归读取,如果为true,那么所有的子目录将被搜索。

    本案例的完整代码如下所示:

    2 简述RAF的两种创建模式

    参考答案

    RandomAccessFile在对文件进行随机访问操作时有两个模式,分别为只读模式(只读取文件数据),和读写模式(对文件数据进行读写)。

    3 简述RandomAccessFile类的read方法和write方法使用int类型存储byte数据的方式和原因

    参考答案

    1)RandomAccessFile提供了一个可以从文件中读取字节的方法:

    1. int read()

    该方法会从文件中读取一个byte(8位) 填充到int的低八位, 高24位为0, 返回值范围正数: 0~255, 如果返回-1表示读取到了文件末尾! 每次读取后自动移动文件指针, 准备下次读取。

    2)RandomAccessFile提供了一个可以向文件中写出字节的方法:

     
    1. void write(int d)

    该方法会根据当前指针所在位置处写入一个字节,是将参数int的”低8位”写出。

    3)使用int类型存储byte数据,这是因为,RandomAccessFile类的read方法,能读到的数据有257个数值,其中,0到255表示数据,-1表示读取到了文件末尾。而write方法与read方法是一对方法,因此write方法也采用了int类型。

    4 实现文件的复制功能

    使用RandomAccessFile类的read(byte[])方法和write(byte[])方法实现文件复制。

    参考答案

    实现此案例需要按照如下步骤进行。

    步骤一:新建TestRandomAccessFileCopy类,添加测试方法testCopyFile方法

    首先新建类TestRandomAccessFileCopy,然后在该类中添加测试方法testCopyFile,代码如下所示:

     
    1. import org.junit.Test;
    2. /**
    3. * 测试文件复制
    4. */
    5. public class TestRandomAccessFileCopy {
    6.     
    7.     /**
    8.      * 测试使用字节数组形式复制文件
    9.      */
    10.     @Test
    11.     public void testCopyFile()throws Exception{
    12.     }
    13. }

    步骤二:实现文件复制

    首先,分别创建只读模式的RandomAccessFile类的对象和读写模式的RandomAccessFile类的对象;然后,使用循环。在循环中,使用RandomAccessFile类的read(byte[])方法从文件raf.dat中读取数据;使用RandomAccessFile类的write(byte[])方法将读取到的数据写入raf_copy.dat文件中,直到read方法返回-1,则退出循环;最后,将RandomAccessFile类的对象关闭,以释放资源,代码如下所示:

     
    1. import java.io.RandomAccessFile;
    2. import org.junit.Test;
    3. /**
    4. * 测试文件复制
    5. */
    6. public class TestRandomAccessFileCopy{
    7.     
    8.     /**
    9.      * 测试使用字节数组形式复制文件
    10.      */
    11.     @Test
    12.     public void testCopyFile()throws Exception{
    13.         RandomAccessFile rafRead = new RandomAccessFile("raf.dat", "r");
    14.         RandomAccessFile rafWrite = new RandomAccessFile("raf_copy.dat", "rw");
    15.         
    16.         int len = -1;
    17.         byte[] buf = new byte[1024];
    18.         while((len = rafRead.read(buf)) != -1){
    19.             rafWrite.write(buf,0,len);
    20.         }
    21.         System.out.println("复制完毕");
    22.         rafRead.close();
    23.         rafWrite.close();
    24.     }
    25. }

    运行testCopyFile方法,在当前工程下生成了文件raf_copy.dat,该文件的内容与文件raf.dat的内容相同。

    本案例的完整代码如下所示:

     
    1. import java.io.RandomAccessFile;
    2. import org.junit.Test;
    3. /**
    4. * 测试文件复制
    5. */
    6. public class TestRandomAccessFileCopy {
    7.     
    8.     /**
    9.      * 测试使用字节数组形式复制文件
    10.      */
    11.     @Test
    12.     public void testCopyFile()throws Exception{
    13.         RandomAccessFile rafRead = new RandomAccessFile("raf.dat", "r");
    14.         RandomAccessFile rafWrite = new RandomAccessFile("raf_copy.dat", "rw");
    15.         
    16.         int len = -1;
    17.         byte[] buf = new byte[1024];
    18.         while((len = rafRead.read(buf)) != -1){
    19.             rafWrite.write(buf,0,len);
    20.         }
    21.         System.out.println("复制完毕");
    22.         rafRead.close();
    23.         rafWrite.close();
    24.     }
    25. }

    5 文件信息如下所示,下面代码的输出结果是?

    请看raf.dat文件的内容如下:

     
    1. Welcome,NEWYORK

    以上字符都为英文字符,请看下列代码的输出结果是:()。

     
    1.         RandomAccessFile raf = new RandomAccessFile("raf.dat", "r");
    2.         raf.skipBytes(8);
    3.         byte[] buf = new byte[7];
    4.         raf.read(buf);
    5.         System.out.println(new String(buf));
    6.         raf.close();

    参考答案

    上述代码的输出结果为:NEWYORK。

    在上述代码中,将文件指针使用 RandomAccessFile类的skipBytes方法跳过了8个字节。跳过了8个字节后,再读取raf.dat文件剩余的内容,该内容为NEWYORK。

  • 相关阅读:
    vue组件常用传值
    定时器的暂停,继续,刷新
    element-ui表格带复选框使用方法及默认选中方法
    git创建分支
    CAS协议原理与代码实现(单点登录 与 单点登出的流程)
    Java-技术专区-Files类和Paths类的用法
    Java-技术专区-Java8特性-parallelStream
    ELK日志系统环境搭建-6.x系列
    Spring系列-Spring Aop基本用法
    Spring-框架系列-SpringIOC容器初始化
  • 原文地址:https://www.cnblogs.com/xyk1987/p/8330940.html
Copyright © 2011-2022 走看看