我一直在使用下面的成语一段时间了.它似乎是最广泛的,至少在我访问过的网站上.
是否有更好/不同的方式将文件读入Java中的字符串?
private String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader (file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} finally {
reader.close();
}
}
Run Code Online (Sandbox Code Playgroud) 我试图将一个简单的文本文件读入一个字符串.当然,通常的方法是获取输入流并使用readLine()进行迭代并将内容读入String.
在过去做过数百次之后,我只是想知道如何在最少的代码行中做到这一点?是不是像java这样的东西String fileContents = XXX.readFile(myFile/*File*/)......而是看起来像这样简单的东西?
我知道像Apache Commons IO这样的库提供了这样的简化,甚至我可以编写一个简单的Util类来实现这一点.但我想知道的是 - 这是一个如此频繁的操作,每个人都需要为什么Java不提供这么简单的功能呢?是不是真的有一个方法可以使用某些默认或指定的编码将文件读入字符串?
我的项目有以下结构:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Run Code Online (Sandbox Code Playgroud)
我有一个文件,/src/test/resources/test.csv我想从单元测试加载文件/src/test/java/MyTest.java
我有这个代码不起作用.它抱怨"没有这样的文件或目录".
BufferedReader br = new BufferedReader (new FileReader(test.csv))
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Run Code Online (Sandbox Code Playgroud)
这也行不通.它回来了null.我正在使用Maven来构建我的项目.
是否有任何实用程序可以帮助将资源中的文本文件读入String.我想这是一个很受欢迎的要求,但谷歌搜索后我找不到任何实用程序.
我正在开发使用Android的java.xml.parsers.DocumentBuilder和DocumentBuilderFactory实现从XML文件加载信息的软件.我正在编写我的对象的单元测试,我需要能够提供各种xml文件来运行测试中的代码.我正在使用Eclipse并拥有一个单独的Android测试项目.我找不到将测试xml放入测试项目的方法,以便测试中的代码可以打开文件.
任何关于如何让不同的xml测试文件驻留在测试包中但对被测试代码可见的建议将不胜感激.
以下是我尝试构建单元测试的方法:
public class AppDescLoaderTest extends AndroidTestCase
{
private static final String SAMPLE_XML = "sample.xml";
private AppDescLoader m_appDescLoader;
private Application m_app;
protected void setUp() throws Exception
{
super.setUp();
m_app = new Application();
//call to system under test to load m_app using
//a sample xml file
m_appDescLoader = new AppDescLoader(m_app, SAMPLE_XML, getContext());
}
public void testLoad_ShouldPopulateDocument() throws Exception
{
m_appDescLoader.load();
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为SAMPLE_XML文件位于测试的上下文中,但AndroidTestCase正在为被测系统提供上下文,该系统无法从测试包中看到资产.
这是每个答案给出的修改后的代码:
public class AppDescLoaderTest extends InstrumentationTestCase
{
...
protected void setUp() …Run Code Online (Sandbox Code Playgroud) 从资源中检索文件时,我应该在什么情况下使用哪一个?
我已经将文件读入String.该文件包含各种名称,每行一个名称.现在的问题是我想在String数组中使用这些名称.
为此我写了以下代码:
String [] names = fileString.split("\n"); // fileString is the string representation of the file
Run Code Online (Sandbox Code Playgroud)
但是我没有得到所需的结果,并且在分割字符串后获得的数组长度为1.这意味着"fileString"没有"\n"字符,但文件中有"\n"字符.
那么如何解决这个问题呢?
如果java.net.URL在Spring Boot应用程序中使用,使用classpath协议,它会按预期工作,因为Spring Boot注册URLStreamHandlerFactory.例如new URL("classpath: someFile.whatever").
但是当执行此代码时,java.net.MalformedURLException: unknown protocol: classpath将抛出JUnit测试异常.
URLStreamHandlerFactory在为JUnit测试初始化Spring上下文时,似乎没有注册适当的.
重现步骤:
1)创建Spring Boot Starter项目(例如,仅使用入门Web).
2)添加test.json文件src/main/resources
3)添加以下bean:
@Component
public class MyComponent {
public MyComponent() throws MalformedURLException {
URL testJson = new URL("classpath: test.json");
System.out.println(testJson);
}
}
Run Code Online (Sandbox Code Playgroud)
4)启动应用程序作为Java应用程序工作正常
5)运行默认的"contextLoads"测试:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringUrlTestApplicationTests {
@Test
public void contextLoads() {
}
}
Run Code Online (Sandbox Code Playgroud)
java.net.MalformedURLException: unknown protocol: classpath抛出异常.
在JUnit测试中使用URL与classpath资源的合适方法是什么?
在真实的用例中,我无法改变new URL("classpath: test.json")它,因为它来自第三方库.
试图复制test.json中src/test/resources,以测试是否错误可能由缺少的资源造成的-没有成功.