Java:将文件名和字符串传递到命令行
我有一个小Java程序,试图在命令行中传递一个文本文件和一个或多个由空格分隔的字符串。在文本文件中,我有一个包列表,如下所示:Java:将文件名和字符串传递到命令行,java,Java,我有一个小Java程序,试图在命令行中传递一个文本文件和一个或多个由空格分隔的字符串。在文本文件中,我有一个包列表,如下所示: gui -> awtui swingui swingui -> runner extensions textui -> runner framework awtui -> runner runner -> framework extensions -> framework $ java PackageList sample.txt
gui -> awtui swingui swingui -> runner extensions textui -> runner
framework awtui -> runner runner -> framework extensions -> framework
$ java PackageList sample.txt gui swingui
现在在我的java中,我想通过在命令行中传递文本文件和包ame来列出每个包及其依赖项,如下所示:
gui -> awtui swingui swingui -> runner extensions textui -> runner
framework awtui -> runner runner -> framework extensions -> framework
$ java PackageList sample.txt gui swingui
当我按enter键时,我希望在控制台中按如下方式列出每个包:
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();
}
}
}
}
您正在从命令行中仅读取参数[0]。你想像这样读所有其他参数 加载文件后,添加
for(int i=1; i<args.length;i++)
{
// read args[i]
}
for(int i=1;i您只从命令行读取args[0]。您希望像这样读取所有其他args
加载文件后,添加
for(int i=1; i<args.length;i++)
{
// read args[i]
}
for(int i=1;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();
}
}
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
公营包装商{
公共静态void main(字符串[]args){
文件inputFile=null;
如果(args.length>0){
inputFile=新文件(参数[0]);
}否则{
System.err.println(“无效参数计数:“+args.length”);
系统出口(1);
}
BufferedReader br=null;
试一试{
弦电流线;
br=新的BufferedReader(新的文件读取器(inputFile));
for(inti=1;i”);
}
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
如果(br!=null)
br.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
检查以下代码和注释:
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();
}
}
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
公营包装商{
公共静态void main(字符串[]args){
文件inputFile=null;
如果(args.length>0){
inputFile=新文件(参数[0]);
}否则{
System.err.println(“无效参数计数:“+args.length”);
系统出口(1);
}
BufferedReader br=null;
试一试{
弦电流线;
br=新的BufferedReader(新的文件读取器(inputFile));
for(inti=1;i”);
}
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
如果(br!=null)
br.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
最好使用正则表达式或StringTokenizer解析文件内容,并将键和值放入映射
然后,您可以通过命令行参数查找该值并将其打印出来
伪码
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]));
}
Map deps=新哈希表。。。。。;
每行文件{
String[]标记=line.split(“->”);
副存托凭证(代币[0],代币[1]);
}
对于(int i=1;i”+deps.get(args[i]);
}
类似于此。最好使用正则表达式或StringTokenizer解析文件内容,并将键和值放入映射
然后,您可以通过命令行参数查找该值并将其打印出来
伪码
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]));
}
Map deps=新哈希表。。。。。;
每行文件{
String[]标记=line.split(“->”);
副存托凭证(代币[0],代币[1]);
}
对于(int i=1;i”+deps.get(args[i]);
}
类似的东西。你是说HashMap
而不是Hashtable
?这只是一个伪代码来演示查找,HashMap和Hashtable都可以。@Raymond,让我试试这个建议。我会给你回复的。它看起来很有希望。你是说HashMap
而不是Hashtable
?它只是一个伪代码de为了演示查找,HashMap和Hashtable都很好。@Raymond,让我试试这个建议。我会给你回复的。看起来很有希望。感谢你的回复,我已经测试了你的方法,但不幸的是它没有解决问题。我仍然得到相同的输出,这意味着它只是在文本文件中打印所有包,而不是在e指定的软件包及其应用dependencies@bencho文本文件格式是什么?在包之间有下一行,对吗?@bencho没关系。我在问每个包之间有换行符吗?textui->runner fra