在 java 中从命令行发送参数
Sending arguments from the command line in java
我对 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("/home/myname/Desktop/document.pdf");
替换filesInputStream(args[0]);
,一切顺利。那么为什么路径没有从命令行发送到 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();
}
}
}
到时候正式回答:
java -jar <jarname> <args...>
将调用可执行 JAR 的主要 class。
java -cp <jarname> <classname> <args...>
将调用指定的 class JAR(不一定是可执行文件)。
如果你把 classname 放在第一个语法中,它实际上成为第一个参数,所以你的 args
数组移动了一个位置,因为无用的 fileRead
参数进入争吵。
我对 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("/home/myname/Desktop/document.pdf");
替换filesInputStream(args[0]);
,一切顺利。那么为什么路径没有从命令行发送到 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();
}
}
}
到时候正式回答:
java -jar <jarname> <args...>
将调用可执行 JAR 的主要 class。
java -cp <jarname> <classname> <args...>
将调用指定的 class JAR(不一定是可执行文件)。
如果你把 classname 放在第一个语法中,它实际上成为第一个参数,所以你的 args
数组移动了一个位置,因为无用的 fileRead
参数进入争吵。