![](/img/trans.png)
[英]Noob question, passing in a file name / directory into command line in Java
[英]Java: Passing file name and string to the command line
我有一個小的Java程序,我試圖在命令行傳遞一個文本文件和一個或多個由空格分隔的字符串。 在文本文件中,我有一個包列表,如下所示:
gui -> awtui swingui swingui -> runner extensions textui -> runner
framework awtui -> runner runner -> framework extensions -> framework
現在在我的java中,我想通過在命令行傳遞文本文件和包ame來列出每個包及其依賴項,如下所示:
$ java PackageList sample.txt gui swingui
當我按回車鍵時,我想在控制台上按如下方式列出每個包:
gui -> awtui swingui
swingui -> runner extensions
如您所見,如果未在命令行中作為參數傳遞,則其余軟件包不應出現在輸出中。
這是我的Java代碼,它希望當前打印文件的所有內容,而不管文件名后的命令行參數如何:
public class PackageList {
public static void main(String[] args) {
File inputFile = null;
if (args.length > 0) {
inputFile = new File(args[0]);
} else {
System.err.println("Invalid arguments count:" + args.length);
System.exit(1);
}
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(inputFile));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
您只從命令行中讀取args [0]。 你想讀這樣的所有其他args。
文件加載后添加
for(int i=1; i<args.length;i++)
{
// read args[i]
}
檢查以下代碼和評論:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class PackageList {
public static void main(String[] args) {
File inputFile = null;
if (args.length > 0) {
inputFile = new File(args[0]);
} else {
System.err.println("Invalid arguments count:" + args.length);
System.exit(1);
}
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(inputFile));
for(int i=1; i < args.length;i++){ // For loop to check - args[0] is file name so i = 1
boolean isDependencyExist = false; // check dependency
while ((sCurrentLine = br.readLine()) != null) {
if(sCurrentLine.startsWith(args[i])){ // If file line starts with arg print
System.out.println(sCurrentLine);
isDependencyExist = true;
break;
}
}
if(!isDependencyExist){
System.out.println(args[i] + " ->");
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
最好使用Regex或StringTokenizer解析文件內容,並將鍵和值放入Map中。
然后,您可以通過命令行args查找值並將其打印出來。
偽代碼
Map<String, String> deps = new Hashtable.....;
foreach line of file {
String[] tokens = line.split(" -> ");
deps.put(tokens[0], tokens[1]);
}
for (int i=1; i < args.size(); i++) {
System.out.println(args[i] + " -> " + deps.get(args[i]));
}
這樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.