Stellarcore.net

Stellarcore.net

I had client who was saving files across the network from a Solaris box. They wanted the file renamed but the Solaris box was very underpowered so I wrote a java find file and rename so that it work under windows.

//find file in java
//Mike Tremaine mgt@stellarcore.net

import java.io.*;

public class find {

   public static String[] parseopts(String[] input_args) {
      //Initalize Options
      String[] options = new String[3];
      for ( String myarg : input_args ) {
         //Switch for each args - case does not allow strings
         if ( myarg.startsWith("--path=") ) {
            options[0] = myarg.substring(7,myarg.length());
            options[0] = options[0].replaceAll("\"","");
         } else if ( myarg.startsWith("--file=") ) {   
            options[1] = myarg.substring(7,myarg.length());
            options[1] = options[1].replaceAll("\"","");
         } else if ( myarg.startsWith("--newfile=") ) {   
            options[2] = myarg.substring(10,myarg.length());
            options[2] = options[2].replaceAll("\"","");
         }
      }
      //Check that we have path file and newfile
      if ( options[0] == null || options[1] == null || options[2] == null ) {
         System.err.println( "Usage: find [--path=path to search] [--file=filename to find] [--newfile=suffix to append]");
         System.exit(1);
      }
      // Else go ahead
      return options;
   }

   private static void searchpath (String i_path, String i_file, String n_suffix) throws IOException {
      File m_dir = new File (i_path);
      File [] m_files = m_dir.listFiles();
      //For loop search/rename files and recurse
      for ( File m_file : m_files ) { 
         if ( m_file.isFile() && i_file.equals(m_file.getName()) ) {
            //Before we add to array increment counter and check array size
            System.out.println("File found: " + m_file.getAbsolutePath() ); 
            File newfile = new File (m_file.getAbsolutePath() + "." + n_suffix);
            //Rename
            boolean success = m_file.renameTo(newfile);
            if (!success) {
               System.out.println("File rename failed: " + newfile.getAbsolutePath() );
            }
         // Do not follow symlinks test absolute vs canonical dir names
         } else if ( m_file.isDirectory() &&  m_file.getAbsolutePath().equals(m_file.getCanonicalPath()) ) {
            //Call searchpath again and recurse
            //System.out.println("Debug in Absolute dir found: " + m_file.getAbsolutePath() ); 
            try {
               searchpath( m_file.getAbsolutePath(), i_file, n_suffix );
            }
            catch ( Exception e ) {
               System.out.println("Error in searchpath check permissions: " + m_file ); 
            }
         }
      }
   }

   public static void main (String[] args) {

      //Parse the input Args
      String[] input = parseopts(args);

      //Start search/rename	
      try {
         searchpath(input[0],input[1],input[2]);
      }
      catch ( Exception e ) {
         System.out.println("Error in searchpath check permissions: " + input[0] ); 
      }
   }

}

// vi: shiftwidth=3 tabstop=3 et