【问题标题】:Sending arguments from the command line in java从java中的命令行发送参数
【发布时间】:2015-01-19 02:13:27
【问题描述】:

我对 java 比较陌生,想根据我提供的命令行参数生成一个从 pdf 读取文本的程序。在此示例中,我想传递文件 document.pdf(与我的 jar 文件位于同一目录中)。我还尝试使用 /home/myname/Desktop/document.pdf 从我的桌面发送文件(以查看这是否是相对/绝对路径问题)。我继续收到未找到文件的错误。我认为通过以下调用,我将文件路径作为 args[0] 发送到程序..

java -jar fileRead.jar fileRead document.pdf

---or--- 

java -jar filereadjar fileRead /home/myname/Desktop/document.pdf

如果我在程序中将filesInputStream(args[0]); 替换为filesInputStream("/home/myname/Desktop/document.pdf");,一切顺利。那么为什么不从命令行将路径发送到 filesInputStream 呢?

谢谢。

package fileRead;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.PrintWriter;


import org.apache.tika.parser.pdf.PDFParser;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.ContentHandler;

public class fileRead {

      public static void main(String args[]) throws Exception {

            InputStream is = null;
            try {
              is = new FileInputStream(args[0]);
              ContentHandler contenthandler = new BodyContentHandler(-1);
              Metadata metadata = new Metadata();
              PDFParser pdfparser = new PDFParser();
              pdfparser.parse(is, contenthandler, metadata, new ParseContext());

              PrintWriter writer = new PrintWriter("/home/marek/Downloads/the-file-name.txt", "UTF-8");
              writer.println(contenthandler.toString());
              writer.close();
            }
            catch (Exception e) {
              e.printStackTrace();
            }
            finally {
                if (is != null) is.close();
            }
          }

}

【问题讨论】:

  • 我认为您正在阅读文件fileRead,而不是document.pdf。如果您的 JAR 在您的清单中有一个主类,它将被执行而无需您在命令行上指定它。也许你把它和java -cp fileRead.jar fileRead document.pdf 混在一起了,你需要在哪里指定主类?试试java -jar fileRead.jar document.pdf,或者上面提到的-cp 变体。也可以尝试打印args[0] 来亲自看看它是什么。
  • Steve - 抱歉“拒绝”您的编辑。这是一个错误,一个很好的建议,我无意中拒绝了它。对不起。
  • 你说得对,阿马丹。谢谢。

标签: java command-line-arguments


【解决方案1】:

那么正式回答:

java -jar <jarname> <args...> 将调用可执行 JAR 的主类。

java -cp <jarname> <classname> <args...> 将调用 JAR 的指定类(不一定是可执行文件)。

如果你把类名放在第一个语法中,它实际上成为第一个参数,所以你的 args 数组移动了一个位置,因为一个无用的 fileRead 参数进入了竞争。

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多