首页 > 解决方案 > 从java中的本地目录检索文件路径

问题描述

问题陈述:语言使用Java,文件类型为.feature

  1. 扫描位于 rootdirect 文件夹内的根文件夹中的所有文件 --> C:/src/test/resources/root 注意:根文件夹有超过 100 个文件和子文件夹

  2. 读取所有文件并匹配某个字符串,如果文本匹配则返回文件名

  3. 获取从步骤 2 派生的文件路径并获取找到文本的完整行

我对第 1 步和第 2 步很好,但在第 3 步中卡住了。无论我使用什么 - File.getPath() 或 File.getAbsolutePath() 它都不会返回我派生文件的完整路径。

public class ABC{

   static String maindirpath = "C:\\Users\\<xxx>\\<somefolder>\\ <src\\test\\resources\\rootdirect";
   static File maindir = new File(maindirpath); 

   String findText1 = "sometext";
   public static void main(String[] args) {

    if(maindir.exists() && maindir.isDirectory()) 
            { 
                // array for files and sub-directories  
                // of directory pointed by maindir 
                File arr[] = maindir.listFiles(); 
    
                // Calling recursive method 
                RecursiveScan(arr,0,0);  
            }  
     }

       void RecursiveScan(File[] arr,int index,int level) throws IOException  
    { 
        
        
        // terminate condition 
        if(index == arr.length)  
        {   String eof = "No file exist";
            usingBufferedWritter(eof);
            return; 
        }
          
        // tabs for internal levels 
        for (int i = 0; i < level; i++) 
        {
            System.out.print("\t");
            String tab = "\t";
            usingBufferedWritter(tab);
            
           
        }
          
        // for files 
        if(arr[index].isFile()) 
        {
            String fileName = arr[index].getName();
            
            Scanner myReader = new Scanner (arr[index]);
           int linenum =1;
            while (myReader.hasNext())
            {
                String data = myReader.nextLine();
                if(data.contains(findText1))
                 {
                    //to print file name
                    System.out.println("Match found on " + arr[index].getName());
                File fpath = new File(fileName);
                String abspath = fpath.getAbsolutePath();
                System.out.println("abs path "+abspath);
                
                String pth = fpath.getPath();
                System.out.println("path "+pth);
                    
                  }
                
                linenum++;
            }
         
        
                
            
            
         }
           
            
          
        // for sub-directories 
        else if(arr[index].isDirectory()) 
        { 
            System.out.println("[" + arr[index].getName() + "]"); 
            
           
            // recursion for sub-directories 
            
            RecursiveScan(arr[index].listFiles(), 0, level + 1); 
        } 
       
        // recursion for main directory 
   
        RecursiveScan(arr,++index, level); 
    }   

}

电流输出:

  1. 绝对路径 C:\Users<xxx>\\filename.feature
  2. 路径文件名.feature

预期输出:

对于 rootdirec 文件夹“C:\Users<xxx><somefolder><src\test\resources\rootdirect\filename.feature”中的文件

对于 rootdirect 文件夹子目录中的文件 "C:\Users<xxx><somefolder><src\test\resources\rootdirect\subfolder\filename.feature" 或

<src\test\resources\rootdirect\subfolder\subfolder1\filename.feature"

标签: javafilepath

解决方案


您已经拥有来自以下位置的文件if(arr[index].isFile())

File fpath = arr[index]

推荐阅读