如何使用Java访问内联文本文件?

时间:2010-09-17 15:50:36

标签: java file inline

我正在处理的程序涉及处理文件内容。现在我正在编写jUnit测试以确保事情按预期工作。作为这些测试的一部分,我想引用一个内联文本文件来定义特定测试的范围。

我如何访问这样的文件?

- 让我澄清一下: 通常,在打开文件时,您需要指明文件的位置。我想说的是“在这个项目中”。这样,当其他人查看我的代码时,他们也可以访问同一个文件。我可能错了,但是没有特殊的方法,可以访问属于“this”项目的文件,相对于“磁盘上的某些文件”。

2 个答案:

答案 0 :(得分:2)

如果你的意思是你有一个文件,你需要你的测试能够读取,如果你将文件复制到类路径中,你的测试可以使用Class.getResourceAsStream()读取它。

举个例子试试这个链接(Jon Skeet回答了这样的问题):

read file in classpath

答案 1 :(得分:1)

您还可以为InputStream或您拥有的实现自己的测试类。

package thop;

import java.io.InputStream;


/**
 *
 * @author tonyennis
 */
public class MyInputStream extends InputStream {

    private char[] input;
    private int current;

    public MyInputStream(String s) {
        input = s.toCharArray();
        current = 0;
    }

    public int read() {
        return (current == input.length) ? -1 : input[current++];
    }

    @Override
    public void close() {
    }
}

这是一个简单的InputStream。你给它一个字符串,它给你字符串。如果您要测试的代码需要一个InputStream,您可以使用它(或类似的东西,heh)来准确输入想要测试的字符串。您不需要资源或磁盘文件。

这里我使用我的lame类作为BufferedInputStream的输入......

package thop;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 *
 * @author tonyennis
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        InputStream is = new MyInputStream("Now is the time");
        BufferedInputStream bis = new BufferedInputStream(is);
        int res;
        while((res = bis.read()) != -1) {
            System.out.println((char)res);
        }
    }
}

现在,如果你想确保你的程序正确解析inputStream,你就是金色的。您可以毫无困难地将它输入您想要测试的字符串。如果你想确保被测试的类总是关闭InputStream,添加一个“isOpen”布尔实例变量,在构造函数中将其设置为true,在close()中将其设置为false,并添加一个getter。

现在您的测试代码将包含以下内容:

MyInputStream mis = new MyInputStream("first,middle,last");
classBeingTested.testForFullName(mis);
assertFalse(mis.isOpen());