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


推荐阅读
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 获取计算机硬盘序列号的方法与实现
    本文介绍了如何通过编程方法获取计算机硬盘的唯一标识符(序列号),并提供了详细的代码示例和解释。此外,还涵盖了如何使用这些信息进行身份验证或注册保护。 ... [详细]
  • 本文探讨了在C++中如何有效地清空输入缓冲区,确保程序只处理最近的输入并丢弃多余的输入。我们将介绍一种不阻塞的方法,并提供一个具体的实现方案。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
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社区 版权所有