从java中的命令行发送参数

时间:2015-01-19 02:13:28

标签: java command-line-arguments

我对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();
            }
          }

}

1 个答案:

答案 0 :(得分:1)

然后正式回答:

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

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

如果您将classname放在第一个语法中,它实际上会成为第一个参数,因此您的args数组会移动一个位置,因为无用的fileRead参数会进入参数。