输出当前目录下所有的内容。
实现此案例需要按照如下步骤进行。
步骤一:构建测试方法
首先,新建TestFile类,并在类中新建测试方法testListFiles,代码如下所示:
import java.io.File; import java.io.IOException; import org.junit.Test; public class TestFile { #cold_bold @Test #cold_bold public void testListFiles() { #cold_bold #cold_bold } }
步骤二:获取当前目录下的内容
首先,使用File类构建表示当前目录的file对象;然后,使用File类的listFiles方法获取到当前目录下所有的内容,包括文件和目录;最后,遍历listFiles方法返回的数组查看当前目录下的内容,代码如下所示:
import java.io.File; import java.io.IOException; import org.junit.Test; public class TestFile { @Test public void testListFiles() { #cold_bold File dir = new File("."); #cold_bold File[] subs = dir.listFiles(); #cold_bold for (File sub : subs) { #cold_bold System.out.println(sub); #cold_bold } } }
上述代码中,“.”表示的当前目录,本题案例的当前目录,就是当前工程下。
步骤三:运行
运行testListFiles方法,控制台输出结果如下所示:
.\.classpath .\.project .\a .\bin .\demo .\doc .\lib .\myDir .\src
本案例的完整代码如下所示:
import java.io.File; import java.io.IOException; import org.junit.Test; public class TestFile { @Test public void testListFiles() { File dir = new File("."); File[] subs = dir.listFiles(); for (File sub : subs) { System.out.println(sub); } } }
输出当前目录下,所有扩展名为.txt的文件。
实现此案例需要按照如下步骤进行。
步骤一:构建测试方法
首先,在TestFile类中新建测试方法testFileFilter,代码如下所示:
import java.io.File; import java.io.FileFilter; import java.io.IOException; import org.junit.Test; public class TestFile { #cold_bold @Test #cold_bold public void testFileFilter() { #cold_bold #cold_bold } }
步骤二:获取当前目录下的扩展名为.txt的文件
首先,使用File类构建表示当前目录的file对象;然后,使用File类的listFiles方法获取当前目录下的扩展名为.txt的文件;最后,遍历listFiles方法返回的数组查看当前目录下的内容,代码如下所示:
import java.io.File; import java.io.FileFilter; import java.io.IOException; import org.junit.Test; public class TestFile { @Test public void testFileFilter() { #cold_bold File dir = new File("."); #cold_bold File[] subs = dir.listFiles(new FileFilter() { #cold_bold public boolean accept(File file) { #cold_bold return file.getName().endsWith(".txt"); #cold_bold } #cold_bold }); #cold_bold for (File sub : subs) { #cold_bold System.out.println(sub); #cold_bold } } }
此处使用了listFiles方法,该方法的参数为FileFilter类型,FileFilter是抽象路径名的过滤器。此接口的实例可传递给 File 类的 listFiles(FileFilter) 方法,实现过滤功能。
本案例的完整代码如下所示:
import java.io.File; import java.io.FileFilter; import java.io.IOException; import org.junit.Test; public class TestFile { //...(之前案例的代码,略) @Test public void testFileFilter() { File dir = new File("."); File[] subs = dir.listFiles(new FileFilter() { public boolean accept(File file) { return file.getName().endsWith(".txt"); } }); for (File sub : subs) { System.out.println(sub); } } }
使用RandomAccessFile类进行文件的读写,详细要求如下:
1)使用RandomAccessFile的write方法向文件raf.dat写入数字“1”。
2)使用RandomAccessFile的read方法从文件raf.dat中将数字“1”读取出来并打印到控制台。
实现此案例需要按照如下步骤进行。
步骤一:新建TestRandomAccessFile类,添加测试方法testWrite方法
首先,新建类TestRandomAccessFile;然后,在该类中添加测试方法testWrite,代码如下所示:
import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试写出方法 * @throws Exception */ @Test public void testWrite()throws Exception{ } }
步骤二:使用RandomAccessFile类的write方法向文件写数据
首先,使用读写模式创建RandomAccessFile类的对象;然后,使用RandomAccessFile类的write方法向文件raf.dat写数字“1”。该方法写出一个字节,写出的是int值的低8位。代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试写出方法 * @throws Exception */ @Test public void testWrite()throws Exception{ #cold_bold RandomAccessFile raf = new RandomAccessFile("raf.dat","rw"); #cold_bold //写出一个字节,写的是int值的低8位 #cold_bold raf.write(1); #cold_bold raf.close(); } }
运行testWrite方法,在当前工程下生成文件raf.dat,该文件的大小为1个字节。
步骤三:添加测试方法testRead
在TestRandomAccessFile类中添加测试方法testRead,代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试写出方法 * @throws Exception */ @Test public void testWrite()throws Exception{ //...(代码略) } /** * 测试读取方法 */ #cold_bold @Test #cold_bold public void testRead()throws Exception{ #cold_bold } }
步骤四:使用TestRandomAccessFile类的read方法从文件读取数据
首先,使用只读模式创建RandomAccessFile类的对象;使用RandomAccessFile类的read方法从文件raf.dat读取数字“1”。该方法读取一个字节,读取的是int值的低8位。代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试写出方法 * @throws Exception */ @Test public void testWrite()throws Exception{ //...(代码略) } /** * 测试读取方法 */ @Test public void testRead()throws Exception{ #cold_bold RandomAccessFile raf = new RandomAccessFile("raf.dat","r"); #cold_bold //读取一个字节 #cold_bold int d = raf.read(); #cold_bold System.out.println(d); #cold_bold raf.close(); } }
运行testRead方法,控制台输出结果如下:
1
从输出结果可以看出,已经将数字“1”读取出来。
本案例的完整代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试写出方法 * @throws Exception */ @Test public void testWrite()throws Exception{ RandomAccessFile raf = new RandomAccessFile("raf.dat","rw"); //写出一个字节,写的是int值的低8位 raf.write(1); raf.close(); } /** * 测试读取方法 */ @Test public void testRead()throws Exception{ RandomAccessFile raf = new RandomAccessFile("raf.dat","r"); //读取一个字节 int d = raf.read(); System.out.println(d); raf.close(); } }
使用RandomAccessFile类进行文件的读写,详细要求如下:
1)使用RandomAccessFile的write(byte[])方法向文件raf.dat写入字符串“HelloWorld”。
2)使用RandomAccessFile的read(byte[])方法从文件raf.dat中将字符串“HelloWorld”读取出来并打印到控制台。
实现此案例需要按照如下步骤进行。
步骤一:在TestRandomAccessFile类中,添加测试方法testWriteByteArray方法
在TestRandomAccessFile类中添加测试方法testWriteByteArray,代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试批量写出 */ #cold_bold @Test #cold_bold public void testWriteByteArray() throws Exception { #cold_bold } }
步骤二:使用RandomAccessFile类的write(byte[])方法向文件写数据
首先,使用读写模式创建RandomAccessFile类的对象;然后,使用RandomAccessFile类的write(byte[])方法向文件raf.dat中写字符串“HelloWorld”。该方法将字节数组中所有字节一次性写出。代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试批量写出 */ @Test public void testWriteByteArray() throws Exception { #cold_bold RandomAccessFile raf = new RandomAccessFile("raf.dat", "rw"); #cold_bold // 将字符串按照默认编码转换为字节数组 #cold_bold byte[] buf = "HelloWorld".getBytes(); #cold_bold // 将字节数组中所有字节一次性写出 #cold_bold raf.write(buf); #cold_bold raf.close(); } }
运行testWriteByteArray方法,将当前工程下的raf.dat文件的大小变为10个字节。
步骤三:添加测试方法testReadByteArray
在TestRandomAccessFile类中添加测试方法testReadByteArray,代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试批量写出 */ @Test public void testWriteByteArray() throws Exception { //...(代码略) } /** * 测试批量读取 */ #cold_bold @Test #cold_bold public void testReadByteArray() throws Exception { #cold_bold } }
步骤四:使用TestRandomAccessFile类的read(byte[])方法从文件读取数据
首先,使用只读模式创建RandomAccessFile类的对象;使用RandomAccessFile类的read(byte[])方法从文件raf.dat读取字符串“HelloWord”。代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试批量写出 */ @Test public void testWriteByteArray() throws Exception { //...(代码略) } /** * 测试批量读取 */ @Test public void testReadByteArray() throws Exception { #cold_bold RandomAccessFile raf = new RandomAccessFile("raf.dat", "r"); #cold_bold // 创建长度为10的字节数组 #cold_bold byte[] buf = new byte[10]; #cold_bold // 尝试读取10个字节存入数组,返回值为读取的字节量 #cold_bold int len = raf.read(buf); #cold_bold System.out.println("读取到了:" + len + "个字节"); #cold_bold System.out.println(new String(buf)); #cold_bold raf.close(); } }
运行testReadByteArray方法,控制台输出结果如下:
读取到了:10个字节 HelloWorld
从输出结果可以看出,已经将字符串“HelloWorld”读取出来了。
本案例中,类TestRandomAccessFile的完整代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { //...(之前案例的代码,略) /** * 测试批量写出 * * @throws Exception */ @Test public void testWriteByteArray() throws Exception { RandomAccessFile raf = new RandomAccessFile("raf.dat", "rw"); // 将字符串按照默认编码转换为字节 byte[] buf = "HelloWorld".getBytes(); // 将字节数组中所有字节一次性写出 raf.write(buf); raf.close(); } /** * 测试批量读取 * * @throws Exception */ @Test public void testReadByteArray() throws Exception { RandomAccessFile raf = new RandomAccessFile("raf.dat", "r"); // 创建长度为10的字节数组 byte[] buf = new byte[10]; // 尝试读取10个字节存入数组,返回值为读取的字节量 int len = raf.read(buf); System.out.println("读取到了:" + len + "个字节"); System.out.println(new String(buf)); raf.close(); } }
使用RandomAccessFile类的对象操作文件指针,详细要求如下:
1)获取文件raf.dat的指针。
2)设置指针读取raf.dat中的字符串“World”。
3)将指针移动到raf.dat文件的开始。
实现此案例需要按照如下步骤进行。
步骤一:添加测试方法testPointer方法
在TestRandomAccessFile类中添加测试方法testPointer,代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试指针相关方法 */ #cold_bold @Test #cold_bold public void testPointer() throws Exception { #cold_bold #cold_bold } }
步骤二:使用RandomAccessFile类的getFilePointer方法获取文件指针
使用RandomAccessFile类的getFilePointer方法获取raf.dat文件的指针,代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试指针相关方法 */ @Test public void testPointer() throws Exception { #cold_bold RandomAccessFile raf = new RandomAccessFile("raf.dat", "r"); #cold_bold // 输出指针位置,默认从0开始(文件的第一个字节位置) #cold_bold System.out.println("指针位置:" + raf.getFilePointer()); #cold_bold #cold_bold raf.close(); } }
文件指针位置默认从0开始,即文件的第一个字节所在的位置。
运行testPointer方法,控制台输出结果如下:
指针位置:0
从输出结果可以看出,文件指针位置为0。
步骤三:读取字符串“World“
首先,使用RandomAccessFile类的skipBytes方法跳过“Hello”这5个字节并查看此时的文件指针位置;然后,使用RandomAccessFile类的read(byte[])方法读取“World”并输出;最后,再次获取此时指针的位置,代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试指针相关方法 */ @Test public void testPointer() throws Exception { RandomAccessFile raf = new RandomAccessFile("raf.dat", "r"); // 输出指针位置,默认从0开始(文件的第一个字节位置) System.out.println("指针位置:" + raf.getFilePointer()); #cold_bold // 读取world,需要将hello这5个字节跳过 #cold_bold raf.skipBytes(5); #cold_bold System.out.println("指针位置:" + raf.getFilePointer()); #cold_bold // 读取world这5个字节 #cold_bold byte[] buf = new byte[5]; #cold_bold raf.read(buf); #cold_bold System.out.println(new String(buf)); #cold_bold System.out.println("指针位置:" + raf.getFilePointer()); raf.close(); } }
运行testPointer方法,控制台的输出结果如下:
指针位置:0 #cold_bold指针位置:5 #cold_boldWorld #cold_bold指针位置:10
从输出结果可以看出,当使用skipBytes方法跳过5个字节时,文件指针位置为5;从指针位置5开始读取,读取到了字符串“World”;读取完字符串“World”后,文件的指针位置变为10。
步骤四:将指针移到文件开始
使用RandomAccessFile类的seek方法将文件指针移到raf.dat文件的开始,代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { /** * 测试指针相关方法 */ @Test public void testPointer() throws Exception { RandomAccessFile raf = new RandomAccessFile("raf.dat", "r"); // 输出指针位置,默认从0开始(文件的第一个字节位置) System.out.println("指针位置:" + raf.getFilePointer()); // 读取World,需要将Hello这5个字节跳过 raf.skipBytes(5); System.out.println("指针位置:" + raf.getFilePointer()); // 读取World这5个字节 byte[] buf = new byte[5]; raf.read(buf); System.out.println(new String(buf)); System.out.println("指针位置:" + raf.getFilePointer()); // 将游标移动到文件开始 #cold_bold raf.seek(0); #cold_bold System.out.println("指针位置:" + raf.getFilePointer()); raf.close(); } }
运行testPointer方法,控制台输出结果如下:
指针位置:0 指针位置:5 world 指针位置:10 #cold_bold指针位置:0
从输出结果可以看出,已经将指针移到了文件的开始。
本案例的完整代码如下所示:
import java.io.RandomAccessFile; import org.junit.Test; /** * 测试RandomAccessFile */ public class TestRandomAccessFile { //...(之前案例的代码,略) /** * 测试指针相关方法 */ @Test public void testPointer() throws Exception { RandomAccessFile raf = new RandomAccessFile("raf.dat", "r"); // 输出指针位置,默认从0开始(文件的第一个字节位置) System.out.println("指针位置:" + raf.getFilePointer()); // 读取world,需要将hello这5个字节跳过 raf.skipBytes(5); System.out.println("指针位置:" + raf.getFilePointer()); // 读取world这5个字节 byte[] buf = new byte[5]; raf.read(buf); System.out.println(new String(buf)); System.out.println("指针位置:" + raf.getFilePointer()); // 将游标移动到文件开始 raf.seek(0); System.out.println("指针位置:" + raf.getFilePointer()); raf.close(); } }