2011-04-03 12 views

Respuesta

53

Probablemente sólo útil si tiene el archivo esté disponible, por ejemplo, al hacer las pruebas unitarias - esto no va a cargarlo de un frasco que yo sepa.

URL url = Thread.currentThread().getContextClassLoader().getResource("mypackage/YourFile.csv"); 
File file = new File(url.getPath()); 
// where the file is in the classpath eg. <project>/src/test/resources/mypackage/YourFile.csv 
+2

lo que realmente estaba buscando era la abstracción de proporcionar la ruta al archivo, como en getResourceAsStream. De lo contrario, el nuevo archivo/getFile es más directo – simpatico

+0

y funciona también con "YourFile.csv". – simpatico

+0

url es nulo para mí con esa declaración – hithwen

2
import org.apache.commons.io.FileUtils; 
... 
final File dic = FileUtils.getFile("src","test", "resources", "csvFile"); 

desde Apache Commons IO 2.1.

19

Se puede acceder a los recursos de pruebas usando cargador de clases del hilo actual:

InputStream stream = Thread.currentThread().getContextClassLoader() 
    .getResourceAsStream("YOURFILE.CSV"); 
+1

pero quiero un java.io.File y no un InputStream. – simpatico

+0

luego use getClass(). GetResource ("/ src/test/resources/YourFile.csv"); http://download.oracle.com/javase/6/docs/api/java/lang/Class.html – Sean

+1

por lo tanto, FileUtils.toFile (Thread.currentThread(). getClass(). getResource ("/ src/test/resources/YourFile.csv ")); – simpatico

9

de guayaba

import com.google.common.io.Resources; 
URL url = Resources.getResource("YourFile.csv"); 
+0

como @simpatico quiere un 'java.io.File', esta respuesta puede continuar con:' File csvFile = new File (url.toURI()); ' – Abdull

0

Esta solución no necesita de lib. Primero crea una clase util para acceder a los archivos de recursos.

public class TestUtil(Class classObj, String resourceName) throws IOException{ 
    URL resourceUrl = classObj.getResource(FileSystems.getDefault().getSeparator()+resourceName); 
    assertNotNull(resourceUrl); 
    return new File(resourceUrl.getFile()); 
} 

Ahora sólo tiene que llamar al método con la clase de su unittest y el nombre de su archivo en la carpeta ressource.

File cvsTestFile = TestUtil.GetDocFromResource(getClass(), "MyTestFile.cvs"); 
+0

¿dónde puedo obtener la clase FileSystems? –

+1

@ToKra java.nio.file.FileSystems – rjdkolb

0
// assuming a file src/test/resources/some-file.csv exists: 

import java.io.InputStream; 
// ... 
InputStream is = getClass().getClassLoader().getResourceAsStream("some-file.csv"); 
Cuestiones relacionadas