热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Java中将文件路径作为参数传递-PassingfilepathasanargumentinJava

Ihavebeenworkingwithbufferingafileonmylocaldrivetoparseandobtaincertaindata.Forte

I have been working with buffering a file on my local drive to parse and obtain certain data. For test purposes I was easily able to do it this way:

我一直在缓冲本地驱动器上的文件来解析并获取某些数据。出于测试目的,我很容易就能这样做:

public static void main(String[] args) {

    fileReader fr = new fileReader();
    getList lists = new getList();


    File CP_file = new File("C:/Users/XYZ/workspace/Customer_Product_info.txt");
    int count = fr.fileSizeInLines(CP_file);
    System.out.println("Total number of lines in the file are: "+count);

    List lines = fr.strReader(CP_file);

    ....

}

}

fileReader.java file has the following function:

fileReader.java文件具有以下功能:

public List strReader (File in)
{
    List totLines = new ArrayList();

    try
    {
        BufferedReader br = new BufferedReader(new FileReader(in));
        String line;
        while ((line = br.readLine()) != null)
        {
            totLines.add(line);
        }
        br.close();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //String result = null;

    return totLines;
}

Now I want the file path to be passed as a Command line Argument instead. I tried a few things but I am kind of new to this and wasnt able to make it work. Can someone please help and explain what all changes I need to make in order to incorporate that change in my code.

现在我希望文件路径作为命令行参数传递。我尝试了一些东西,但我对此并不熟悉并且无法使其正常工作。有人可以帮助解释我需要做出的所有更改,以便将更改合并到我的代码中。

4 个解决方案

#1


4  

You need to do this:

你需要这样做:

public static void main(String[] args) {
    String path = args[0];
    // ... 
    File CP_file = new File(path);
    // ... 
}        

#2


1  

If you want to replace the hard coded path with one that you are passing via the command line, you should just be able to pass it in as a String. Your code will not read:

如果要将硬编码路径替换为通过命令行传递的路径,则应该能够将其作为String传递。您的代码不会读取:

...
File CP_file = new File(arg[0]);   //Assuming that the path is the first argument
...

Be sure to quote the path on the CLI, especially if it contains white space or other special characters.

请务必在CLI上引用路径,特别是如果它包含空格或其他特殊字符。

#3


1  

The complete answer would be something like this :

完整的答案是这样的:

The below code by path means /etc/dir/fileName.txt

以下代码的路径表示/etc/dir/fileName.txt

public static void main(String[] args) {
String path = args[0];
// ... 
File CP_file = new File(path);
// ... 

}

But if you want to give just a path and from that path your code to read all your files contained by that directory you would require the above to be exported as a jar file code plus a bat file/ script : bat file example :

但是如果你想只提供一个路径,并且从那个路径你的代码读取该目录包含的所有文件,你需要将上面的内容导出为jar文件代码加上bat文件/脚本:bat文件示例:

FOR %%i IN  (C:/user/dir/*.zip) do (java -cp application.jar;dependencies.jar;...;%%i)

Run the script and your code will run the file / files that are on the path C:/user/dir/*.zip

运行脚本,您的代码将运行路径C:/ user / dir / * .zip上的文件/文件

#4


1  

Your problem has two sides: how to pass the parameter from the command line, and how to read it inside your code.

您的问题有两个方面:如何从命令行传递参数,以及如何在代码中读取它。

Passing arguments to a Java program

All arguments meant for the actual Java class and not for the JVM, should be put after the class name, like this:

所有参数都是针对实际的Java类而不是针对JVM的,应该放在类名后面,如下所示:

C:\YOUR\WORKSPACE> java your.package.YouMainClass "C:\Users\XYZ\workspace\Customer_Product_info.txt"`

Things to watch out for:

需要注意的事项:

  • Slashes / vs backslashes \: since you're on a Windows system, I'd rather use backslashes for your path, specially if you are including the drive letter. Java can work with both variants, but it's better to follow your SO conventions.
  • 斜杠/ vs反斜杠\:因为你在Windows系统上,我宁愿使用反斜杠作为你的路径,特别是如果你包括驱动器号。 Java可以使用这两种变体,但最好遵循您的SO约定。

  • Double quotes " to allow for spaces: you'll need to enclose your path in double quotes if any directories contain spaces in their names, so just double quote it every time.
  • 双引号“允许空格:如果任何目录的名称中包含空格,则需要将路径括在双引号中,因此每次都要双引号。

  • Remove final backslash: this only applies to directory paths (file paths can't end in a backslash in Windows). If you write a directory path like this: "C:\My path\XYZ\", the last double quote will be included as part of the path, because of the previous backslash escaping it \". Instead, "C:\My path\XYZ" will do fine.
  • 删除最后的反斜杠:这仅适用于目录路径(文件路径不能以Windows中的反斜杠结尾)。如果你编写一个这样的目录路径:“C:\ My path \ XYZ \”,最后的双引号将作为路径的一部分包含在内,因为前面的反斜杠转义它“。而是,”C:\ My path \ XYZ“会很好。

Reading arguments from your main(String[]) method

Now this one is simple: as others have pointed out, the String with your path should now be in args[0]:

现在这个很简单:正如其他人指出的那样,带有路径的String现在应该在args [0]中:

public static void main(String[] args) {

    fileReader fr = new fileReader();
    getList lists = new getList();

    if (args[0] == null || args[0].trim().isEmpty()) {
        System.out.println("You need to specify a path!");
        return;
    } else {
        File CP_file = new File(args[0]);
        int count = fr.fileSizeInLines(CP_file);
        System.out.println("Total number of lines in the file are: "+count);

        List lines = fr.strReader(CP_file);

        ....
    }
}

I added some null-checking to avoid problems like the ArrayIndexOutOfBounds you run into.

我添加了一些空值检查,以避免遇到像您遇到的ArrayIndexOutOfBounds之类的问题。


推荐阅读
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文介绍了一个SQL Server自定义函数,用于从字符串中提取仅包含数字和小数点的子串。该函数通过循环删除非数字字符来实现,并附带创建测试表、存储过程以演示其应用。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文详细解析了Java中hashCode()和equals()方法的实现原理及其在哈希表结构中的应用,探讨了两者之间的关系及其实现时需要注意的问题。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • This request pertains to exporting the hosted_zone_id attribute associated with the aws_rds_cluster resource in Terraform configurations. The absence of this attribute can lead to issues when integrating DNS records with Route 53. ... [详细]
author-avatar
手机用户2502917943
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有