java file 参数_关于Java:如何将文本文件作为参数传递?

我试图编写一个程序来通过args读取文本文件,但是当我运行它时,它总是说找不到该文件,即使我将其放置在与我正在运行的main.java相同的文件夹中。

有谁知道我的问题的解决方案或更好的阅读文本文件的方法?

Id假设如果将输入作为程序arg传递,则希望将任意输入传递给程序。 那是对的吗?

嗯不是。 您是在谈论方法还是函数? 我说的是一个类,我传入一个参数,当我运行main方法时,它应该读取文本文件,但不是。 我的代码是Scanner sc1 = new Scanner(new File(args [0])); 调试时甚至无法通过此行。

不要在java.io.File中使用相对路径。

它将变成相对于当前工作目录的,这取决于您如何运行应用程序,而这又是无法从应用程序内部进行控制的。这只会导致可移植性麻烦。如果从Eclipse内部运行,则该路径将相对于/path/to/eclipse/workspace/projectname。如果从命令控制台内部运行它,它将相对于当前打开的文件夹(即使当您按绝对路径运行代码时也是如此)。如果通过双击JAR来运行它,它将相对于JAR的根文件夹。如果您在Web服务器上运行它,它将相对于/path/to/webserver/binaries。 Etcetera。

始终在java.io.File中使用绝对路径,没有任何借口。

为了获得最佳的可移植性并减少绝对路径的麻烦,只需将文件放在运行时类路径覆盖的路径中(或将其路径添加到运行时类路径中)。这样,您可以通过Class#getResource()获取文件或通过Class#getResourceAsStream()获取其内容。如果与当前类位于同一文件夹(包)中,则它已经在类路径中。要访问它,只需执行以下操作:

public MyClass() {

URL url = getClass().getResource("filename.txt");

File file = new File(url.getPath());

InputStream input = new FileInputStream(file);

// ...

}

要么

public MyClass() {

InputStream input = getClass().getResourceAsStream("filename.txt");

// ...

}

您可以在Eclipse中指定工作目录。 它在对话框中的"运行方式"下。 这是一种使用相对路径并在Eclipse中仍能获得合理行为的方法。

没错,总会有解决方法和程序带,但是当有更好的方法时,您真的不希望您的应用程序永久依赖于此。

尝试提供文件名的绝对路径。

另外,发布代码,以便我们可以看到您正在尝试的内容。

它无法通过此行:Scanner sc1 = new Scanner(new File(args [0])); 我通过了我的文本文件作为第一个参数

合并行可以帮助缩短代码并可能提高性能(速度),但是在调试时,它有助于拆分内容(即,不在构造函数中嵌入构造函数)。 创建一个File对象,看看这是否是程序运行的地方。 如果不是,则将File对象传递到Scanner(在单独的行中),并查看抛出何种类型的错误。

最简单的解决方案是创建一个新文件,然后查看输出文件在哪里。那是将输入文件放入的正确位置。

当您使用Java(通常)使用相对文件名打开文件时,它将相对于工作目录打开文件。

您可以使用以下命令找到流程的当前工作目录

String workindDir = new File(".").getAbsoultePath()

确保从正确的目录运行程序(或更改文件名,使其相对于运行程序的位置)。

当前的工作目录也可以通过系统属性" user.dir"获得。

如果将文件和使用该文件的类放在同一包下,则可以使用以下命令:

Class A {

void readFile (String fileName)  {

Url tmp = A.class.getResource (fileName);

// Or Url tmp = this.getClass().getResource (fileName);

File tmpFile = File (tmp);

if (tmpFile.exists())

System.out.print("I found the file.")

}

}

如果您阅读有关类加载器的信息,将会有所帮助。

如果您使用的是Eclipse(或类似的IDE),则问题是由于程序从实际源所在的几个目录中运行而导致的。尝试在项目树中将文件上移一两层。

请查看此问题以获取更多详细信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值