我已经将intellij中“Java8在运行”一书中的github项目作为maven项目导入。
模块结构如下所示:
然后,我直接从Intellij(右键单击-
public static void main(String ...args) throws IOException{
// method we want to refactor to make more flexible
String result = processFileLimited();
System.out.println(result);
System.out.println("---");
String oneLine = processFile((BufferedReader b) -> b.readLine());
System.out.println(oneLine);
String twoLines = processFile((BufferedReader b) -> b.readLine() + b.readLine());
System.out.println(twoLines);
}
public static String processFileLimited() throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader("lambdasinaction/chap3/data.txt"))) {
return br.readLine();
}
}
public static String processFile(BufferedReaderProcessor p) throws IOException {
try(BufferedReader br = new BufferedReader(new FileReader("lambdasinaction/chap3/data.txt"))){
return p.process(br);
}
}
public interface BufferedReaderProcessor{
public String process(BufferedReader b) throws IOException;
}
然后,我得到一个FileNotFoundExcema:
Exception in thread "main" java.io.FileNotFoundException: lambdasinaction\chap3\data.txt
如果执行一个“maven包”,那么在jar中,数据将被删除。txt文件直接包含在chap3文件夹/包中,但如果执行以下操作,则会出现相同的错误:
java -classpath lambdasinaction-1.0.jar lambdasinaction.chap3.executeAround
Exception in thread "main" java.io.FileNotFoundException: lambdasinaction\chap3\data.txt (Le chemin d?accès spécifié est introuvable)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at lambdasinaction.chap3.ExecuteAround.processFileLimited(ExecuteAround.java:23)
at lambdasinaction.chap3.ExecuteAround.main(ExecuteAround.java:9)
1-为什么不直接从intellij运行?该文件正确地位于资源文件夹中。
2-这可能是最重要的:为什么当直接从命令行执行程序时它不运行?
谢谢你的帮助
当您执行Java程序时,相关的文件名,如lambdasinaction/chap3/data。根据当前工作目录解析txt
:
的目录。idea
文件夹(还包含pom.xml
、*.iml
、*.ipr
等)文件放在src/main/Resources
下,因此除非当前目录是资源
,否则您将始终得到FileNotFoundExc0019
。一旦部署,您的程序可能找不到您的资源。
好消息是,目录对于Maven和Maven兼容工具(如Intellij)是特殊的,因为内容可以作为类路径资源使用——这意味着您将始终能够使用
getClass().getResourceAsStream("/lambdasinaction/chap3/data.txt");
注意:我没有使用文件系统(FileReader)来解析文件名,而是使用(绝对)类路径资源标识符。
使用“src/main/resources/lambdasinaction/chap3/data.txt”
代替“lambdasinaction/chap3/data.txt”
问题内容: 我一直在看代码,并且看到了尝试资源的机会。我以前使用过标准的try-catch语句,看起来它们在做同样的事情。所以我的问题是“ 尝试使用资源”与“尝试捕获 ”之间的区别是什么,哪个更好。 这是尝试使用资源: 问题答案: 尝试使用资源的重点是确保可靠地关闭资源。 当你不使用try-with-resources时,存在一个潜在的陷阱,称为异常屏蔽。当try块中的代码引发异常,而finall
我需要打开N个多播套接字(其中N来自参数列表的大小)。然后,我将向循环中的N个套接字中的每个套接字发送相同的数据,最后关闭每个套接字。我的问题是,如何使用try with resources块来实现这一点?以下是我将如何使用单个资源来实现这一点: 我能想到的使用多个端口执行此操作的唯一方法如下: 有没有一种更简洁的方法来实现这一点,或者我提出的解决方案是否尽可能好?
try-with 功能如何适用于已声明为 变量? 我假设这会导致空指针异常,当它尝试调用上的变量,但它运行没有问题:
我在maven项目的src/main/resource文件夹中下载了.sh文件,我正在通过下面的代码阅读它 如果我使用jar EX作为应用程序运行:- java-jar runscript.jar SCHEMA_NAME /users/ideaprojects/runscript/target/file:/users/ideaprojects/runscript/target/runscripts
我正在尝试使用appium打开/关闭设备。我在Appium python客户端修改了Webdriver.py。我添加了一个关闭电源的功能和命令。它不起作用。有人能帮我用Appium命令开/关电源吗?PS -我不能使用adb命令
问题内容: 我是的新手,我想知道对于资源来说,我是否必须为每个添加一个,否则它将与上面的代码一起使用 问题答案: 通过在 块中声明所有资源,可以尝试将资源与多个资源一起使用,并且此功能是 Java 7中 引入的,而不是 Java 8中 引入的。如果有多个资源,则可以如下所示 在此示例中,该语句包含两个用分号分隔的声明: ZipFile 和 BufferedWriter 。当它紧随其后的代码块终止时