2010-09-17 31 views
1

我正在處理的程序涉及處理文件內容。現在我正在編寫jUnit測試以確保事情按預期工作。作爲這些測試的一部分,我想引用一個內聯文本文件來定義特定測試的範圍。如何使用Java訪問嵌入式文本文件?

我如何訪問這樣的文件?

- 讓我澄清: 通常,打開文件時,您需要指出文件的位置。我想說的是「在這個項目中」。這樣,當別人看我的代碼時,他們也可以訪問同一個文件。我可能是錯的,但沒有特殊的方法,可以訪問屬於「this」項目的文件,相對於「磁盤上的某些文件」。

+2

內嵌文件?第一次聽到,你能否請你詳細說明一下。 – 2010-09-17 15:53:46

+0

我在頂部添加了說明 – JAM 2010-09-17 16:00:25

回答

2

如果你的意思是你有一個文件,你需要測試才能讀取,如果你將文件複製到類路徑中,你的測試可以使用Class.getResourceAsStream()讀取它。

舉一個例子嘗試此鏈接(喬恩斯基特回答這樣一個問題):

read file in classpath

+0

非常好。謝謝。 – JAM 2010-09-17 16:03:46

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,你可以使用這個(或類似的東西,呵呵)來準確地輸入想要測試的字符串。你不需要資源或磁盤文件。

在這裏,我用我的跛腳類作爲輸入轉換成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());