热门标签 | 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之类的问题。


推荐阅读
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 链表作为一种与数组并列的基本数据结构,在Java中有着广泛的应用。例如,Java中的`ArrayList`基于数组实现,而`LinkedList`则是基于链表实现。链表在遍历操作时具有独特的性能特点,特别是在插入和删除节点时表现出色。本文将详细介绍单向链表的基本概念、操作方法以及在Java中的具体实现,帮助读者深入理解链表的特性和应用场景。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文详细介绍了267 Collections的特性和应用场景。作为Java集合框架中的核心接口,Collection接口是所有单列集合类的顶级接口,涵盖了列表、集合和队列等数据结构。通过具体的应用实例,本文深入解析了Collection接口的各种方法和功能,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • Java学习第10天:深入理解Map接口及其应用 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
  • 洛谷 P4035 [JSOI2008] 球形空间生成器(高斯消元法 / 模拟退火算法)
    本文介绍了洛谷 P4035 [JSOI2008] 球形空间生成器问题的解决方案,主要使用了高斯消元法和模拟退火算法。通过这两种方法,可以高效地求解多维空间中的球心位置。文章提供了详细的算法模板和实现代码,适用于 ACM 竞赛和其他相关应用场景。数据范围限制在 10 以内,确保了算法的高效性和准确性。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
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社区 版权所有