检查java中是不是存在文件
Posted
技术标签:
【中文标题】检查java中是不是存在文件【英文标题】:Checking if a file exists in java检查java中是否存在文件 【发布时间】:2012-09-16 21:14:09 【问题描述】:所以下面的程序应该接受一个输入和输出文件作为命令行参数。
class FileCopy
public static void main(String[] args) throws IOException
String infile = null;
String outfile = null;
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
if (args.length >= 2) //both files given via command line
infile = args[0];
if (fileExists(infile) == false)
infile = getInputFile();
outfile = args[1];
else if (args.length == 1) //input file given via command line
infile = args[0];
outfile = getOutputFile(infile);
else //no files given on command line
infile = getInputFile();
outfile = getOutputFile(infile);
//create file objects to use
File in = new File(infile);
File out = new File(outfile);
/*
*rest of code
*/
//get the input file from the user if given file does not exist
public static String getInputFile() //throws IOException
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String fileName = null;
boolean haveFile = false;
while(haveFile == false)
System.out.println("Enter a valid filename for input:");
System.out.print(">> ");
try
fileName = stdin.readLine();
catch (IOException e)
System.out.println("Caught exception: " + e);
haveFile = fileExists(fileName);
return fileName;
//get the output file and test things
public static String getOutputFile(String infile)
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
File input = new File(infile);
String filename = null;
boolean more = true;
while(more)
System.out.println("Enter a valid filename for output:");
System.out.print(">> ");
try
filename = stdin.readLine();
catch (IOException e)
System.out.println("Caught exception: " + e);
File output = new File(filename);
if (output.exists())
more = false;
if (filename == infile)
int selection;
String inputString = null;
System.out.println("The output file given matches the input file. Please choose an option:");
System.out.println("1) Enter new filename");
System.out.println("2) Overwrite existing file");
System.out.println("3) Backup existing file");
System.out.print(">> ");
try
inputString = stdin.readLine();
catch (IOException e)
System.out.println("Caught exception: " + e);
selection = Integer.valueOf(inputString);
switch (selection)
case 1: //new filename
case 2: //overwrite
case 3: //backup
default: System.exit(0);
return null;
//check the given file to see if it exists in the current working directory
public static boolean fileExists(String n)
return (new File(n)).exists();
【问题讨论】:
你可以把它简化为public static boolean fileExists(String n) return n.length > 0 && new File(n).exists();
你确定这个“input.txt”在你的类路径中吗?尝试在该方法中创建一个新文件并查看它创建它的位置。
不是fileExists
中的代码问题,请在其他地方查找您的问题。顺便说一句,如果您想检查您的参数是否正常,您也必须检查n!=null
您传入的字符串是否也包含驱动器号?我通常从指定整个路径开始,如“c:/temp/myfile.txt”,然后一旦你知道该方法有效,你就可以进一步查看。运行时打印出n的值,是你的目标文件夹还是bin文件夹中的文件?这通常是它执行时的工作目录。
input.txt 的给出方式是通过命令行,我正在运行java FileCopy.java input.txt
,然后从main 中的args[]
数组中提取它(这是该程序所必需的)。
不,字符串不包含驱动器号或完整路径,它只有文件名。我理解file.exists()
的方式是,如果要检查的文件与 java 程序位于同一目录中,则不需要或不应该使用完整路径
【参考方案1】:
我相信你错过了一个细节:
当你的程序只有一个参数(args.length == 1
)时,即只定义输入文件时,fileExists()
根本不会被调用; infile
设置为 args[0]
根本没有验证。您可能应该像对两个参数的情况一样添加一个特定的检查。
【讨论】:
【参考方案2】:我也遇到过类似的问题。我在 Eclipse 下工作,并且必须在我的当前目录中指定“src/file.txt”,在 src 目录中有一个名为“file”的文件。
注意:它没有被命名为“file.txt”(这会导致字符串被解释为“file.txt.txt”!)。
假设您的“src”目录中有一个名为“file”的文件,请尝试在此处针对该程序进行测试:
import java.io.File;
public class FileChecker
public static boolean Exists( String file )
System.out.println("File being checked: " + file);
return( (file.length()) > 0 && (new File(file).exists()) );
public static void main( String[] args )
File dir = new File("src");
System.out.println("List of files in source directory: ");
if( dir.isDirectory())
File[] filenames = dir.listFiles();
for( Object file : filenames )
System.out.println(file.toString());
else
System.out.println("Directory does not exist.");
if(FileChecker.Exists("src/file.txt"))
System.out.println("File exists");
else
System.out.println("File does not exist");
它会打印出源目录中的当前文件,这样你就可以看到文件是否真的存在,然后你可以测试它是否真的存在。对我有用。
【讨论】:
以上是关于检查java中是不是存在文件的主要内容,如果未能解决你的问题,请参考以下文章