开发者

Java. Files and folders. Can't define the type

开发者 https://www.devze.com 2023-02-07 05:04 出处:网络
Good Day! I wrote the method in Java which must search files in folders and do some operations with them.

Good Day!

I wrote the method in Java which must search files in folders and do some operations with them.

So the problem is that when I try to check what I have (file or dir) I receive nothing in both cases! But as i can see paths look correct.

How can I fix this problem?

Here is the code:

public void searchInDir(){

    File inputFile = new File( this.fileName );         
    String[] namesOfFilesDir = inputFile.list();  

    for ( int i = 0; i < namesOfFilesDir.length; i++ )
    {   
        String norm开发者_Python百科alPath = this.getNormalPath(inputFile.getCanonicalPath()); //C:\User -> C:\\User
        // Two separators for correcting path to file
        String pathToCurrentFile = normalPath + File.separator + File.separator + namesOfFilesDir[i];

        File f = new File( pathToCurrentFile, namesOfFilesDir[i] );


        System.out.printf("FileName=%s, Path=[%s]\n", namesOfFilesDir[i], pathToCurrentFile);
        System.out.println(f.isDirectory());//False
        System.out.println(f.isFile());//False too          
        //Some other code           
    }
}

For example this.fileName consists path to folder ( and this folder consists one folder and 2 files).

I got next:

    FileName=Readme.txt, Path=[C:\\workspace\\Grep\\t\\Readme.txt]
    false
    false
    FileName=t2, Path=[C:\\workspace\\Grep\\t\\t2]
    false
    false
    FileName=test.txt, Path=[C:\\workspace\\Grep\\t\\test.txt]
    false
    false

Ok. Program says that.

Lets print next code as an example.

File f = new File("C:\\workspace\\Grep\\t\\Readme.txt");
System.out.println(f.isFile());

Program will print ”True”.


This part makes no sense:

    String pathToCurrentFile = normalPath + File.separator + File.separator + namesOfFilesDir[i];
    File f = new File( pathToCurrentFile, namesOfFilesDir[i] );

Even if we forget about the double separator for the time being, it makes no sense to first construct the file name by adding namesOfFilesDir[i], then construct a File() object using the two-argument constructor which basically adds namesOfFilesDir[i] once more. Try printing f.getAbsolutePath() and you'll see what I mean. It should have probably been something like:

    File f = new File( normalPath, namesOfFilesDir[i] );


Probably the file doesn't exist, so it is neither a file nor a directory. Try printing the output of f.exists() as well.

Did you notice the duplicate file separator in your path?


I think that perhaps your paths are not correct. Both isFile() and isDirectory() only return true if the file/directory actually exists. Have you tried calling exists() on the file? Also, I'm suspicious of what your getNormalPath() method is doing - I think it might be mangling the filenames.


The 1st System.out.println is missleading!
It would have been better to output the path of f.

Anyway, according the output:

FileName=Readme.txt, Path=[C:\workspace\Grep\t\Readme.txt]

f will be C:\workspace\Grep\t\Readme.txt\Readme.txt that is, namesOfFilesDir[i] is being appended twice!

It would be easier/better to work just with instances of File directly:

    File inputFile = new File(this.fileName); 
    File[] files = inputFile.listFiles();
    for (File f : files) {
        System.out.printf("FileName=%s, Parent=[%s]\n", f.getName(), f.getParent());
        System.out.println(f.isDirectory());
        System.out.println(f.isFile());         
        //Some other code
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消