如何在命令行中接收文件名作为程序参数?
嗨!刚启动项目就碰到命令行参数的问题很正常,这是很多程序的基础环节,我给你整理了几种常用编程语言的实现方式,你可以根据自己的技术栈来参考:
Python 实现示例
在Python里,用内置的sys模块就能轻松获取命令行参数,还能顺便做参数校验:
import sys # 先检查有没有传入文件名参数 if len(sys.argv) < 2: print("请在命令行后跟上文件名参数,比如:python your_script.py example.txt") sys.exit(1) # sys.argv[0]是脚本本身的路径,sys.argv[1]就是你传入的第一个文件名 filename = sys.argv[1] print(f"你传入的文件名是:{filename}") # 这里可以加文件读取的示例,方便你直接上手 try: with open(filename, 'r') as f: content = f.read() print("文件内容预览:") print(content[:100]) # 只打印前100个字符避免输出过多 except FileNotFoundError: print(f"错误:找不到文件 {filename}")
Node.js 实现示例
Node.js里靠process.argv数组来获取命令行参数,同样先做参数检查更稳妥:
// 检查参数数量是否足够 if (process.argv.length < 3) { console.log("请传入文件名参数,比如:node your_script.js example.txt"); process.exit(1); } // process.argv[0]是node的路径,process.argv[1]是脚本路径,process.argv[2]就是目标文件名 const filename = process.argv[2]; console.log(`你传入的文件名是:${filename}`); // 用异步方式读取文件,符合Node.js的习惯 const fs = require('fs').promises; async function readTargetFile() { try { const content = await fs.readFile(filename, 'utf8'); console.log("文件内容预览:"); console.log(content.slice(0, 100)); } catch (err) { console.error(`错误:${err.message}`); } } readTargetFile();
Java 实现示例
Java的main方法本身就自带参数数组,直接用就行:
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class FileProcessor { public static void main(String[] args) { // 先判断有没有传入参数 if (args.length == 0) { System.out.println("请传入文件名参数,比如:java FileProcessor example.txt"); System.exit(1); } String filename = args[0]; System.out.println("你传入的文件名是:" + filename); // 读取文件的示例代码 try { String content = Files.readString(Paths.get(filename)); System.out.println("文件内容预览:"); // 避免内容过长,只取前100个字符 System.out.println(content.substring(0, Math.min(content.length(), 100))); } catch (IOException e) { System.err.println("错误:" + e.getMessage()); } } }
C++ 实现示例
C++里通过main函数的argc(参数个数)和argv(参数数组)来获取命令行输入:
#include <iostream> #include <fstream> #include <string> int main(int argc, char* argv[]) { // 检查参数是否足够 if (argc < 2) { std::cout << "请传入文件名参数,比如:./your_program example.txt" << std::endl; return 1; } std::string filename = argv[1]; std::cout << "你传入的文件名是:" << filename << std::endl; // 读取文件并预览内容 std::ifstream file(filename); if (file.is_open()) { std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); std::cout << "文件内容预览:" << std::endl; if (content.size() > 100) { std::cout << content.substr(0, 100) << "..." << std::endl; } else { std::cout << content << std::endl; } file.close(); } else { std::cerr << "错误:无法打开文件 " << filename << std::endl; return 1; } return 0; }
最后给你两个小建议:
- 一定要做参数校验:比如检查是否传入参数、文件是否存在、有没有读写权限,这些细节能让你的程序更稳定,不容易崩溃。
- 如果需要处理多个文件名,只需要遍历参数数组就行,比如Python里的
sys.argv[1:]就是所有传入的文件名列表。
内容的提问来源于stack exchange,提问作者Scott Holley
相关产品推荐
相关产品推荐

