chrisco
chrisco

Reputation: 832

How to Solve Java Error "The system cannot find the path specified"?

I'm running Mac OS X and the code works. My teammate is running Windows 7 and he gets the error (even though the directory structure and file exists on his system). Any ideas? I have spent a number of hours on this and can't figure it out. Thank you.

import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement; // Not used
import java.sql.ResultSet; // Not used
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList; // Not used
import java.util.Scanner; // Not used

public class CreateDB {

   public CreateDB() {
   }

   public void createDB() {

      Connection conn = null;

      String url = "jdbc:mysql://localhost:3306/";
      String dbName = ""; // Not used (yet?)
      String driver = "com.mysql.jdbc.Driver";
      String userName = "root"; // Tell user userName is "root". OR/TODO: Change to something more secure?
      String password = ""; // Tell user password is "". Or/TODO: Change to something more secure?
      String line;
      String sqlDump = null;
      String [] sqlDumpArray;

      String fileSeperator = System.getProperty("file.separator");
      System.out.println("fileSeperator is: " + fileSeperator);  // Testing
      String path = System.getProperty("user.dir");
      System.out.println("path is: " + path); // Testing
      String pathToFile = (path + fileSeperator + "src" + fileSeperator + "files" + fileSeperator);
      System.out.println("pathToFile is: " + pathToFile); // Testing.
      String fileName = "create_db_and_tables.sql"; // NOTE: Rename file, if necessary. Make sure it's in right place.
      System.out.println("pathToFile + fileName is: " + pathToFile + fileName); // Testing.

      try {
         Class.forName(driver).newInstance();
         conn = DriverManager.getConnection(url, userName, password);
         System.out.println("Connected to the database.\n"); // Testing

         BufferedReader reader = new BufferedReader(new FileReader(pathToFile + fileName));
         line = reader.readLine();
         while (line != null) {
            sqlDump += line + "\n";
            line = reader.readLine();
         }

         System.out.println(sqlDump); // Testing
         sqlDumpArray = sqlDump.split(";");
         System.out.println("sqlDumpArray size is " + sqlDumpArray.length); // Testing

         for (int i = 0; i < sqlDumpArray.length; i++) {
            System.out.println("\nsqlDumpArray[" + i + "] is: " + sqlDumpArray[i]);  // Testing
         }

         for (int j = 1; j < sqlDumpArray.length -1; j++) {
            try {
               Statement statement = conn.createStatement();
               statement.addBatch(sqlDumpArray[j]);
               statement.executeBatch(); // Could refactor or us another method
            }
            catch (SQLException e) {
               System.err.println("SQLException: " + e.getMessage());

            }
            catch (Exception e) {
               System.err.println("Exception: " + e.getMessage());
            }
         }
      }
      catch (java.lang.ClassNotFoundException e) {
         System.err.println("ClassNotFoundException: " + e.getMessage());

      }
      catch (SQLException e) {
         System.err.println("SQLException: " + e.getMessage());

      }
      catch (Exception e) {
         System.err.println("Exception: " + e.getMessage());
      }
      finally {
         try {
            // conn.commit(); // Not necessary
            conn.close();
            System.out.println("Successfully disconnected from database. Yeah!");
         }
         catch (SQLException e) {
            System.err.println("SQLException in 'finally' block: " + e.getMessage());
         }
      }
   }
   public static void main(String[] args) {
     CreateDB create = new CreateDB();
     create.createDB();
   }
}

Users on Windows have received the error when when trying to execute the database creation process. This error occurs even when the path and file appear to be correct, such as what is returned by the following System.out.println statement in the file (highlighted below):

String fileSeperator = System.getProperty("file.separator");
System.out.println("fileSeperator is: " + fileSeperator);
String path = System.getProperty("user.dir");
System.out.println("path is: " + path);
String pathToFile = (path + fileSeperator + "src" + fileSeperator + "files" + fileSeperator);
System.out.println("pathToFile is: " + pathToFile);
String fileName = "create_db_and_tables.sql";
System.out.println("pathToFile + fileName is: " + pathToFile + fileName);

This is an example of what that statement returns on a Windows 7 computer:

Exception: C:\Users\USER\workspace\mrbs2011a\src\files\create_db_and_tables.sql (The system cannot find the path specified)

That gets printed out even though USER has the file create_db_and_tables.sql located in the src/files folder.

Upvotes: 2

Views: 7895

Answers (1)

Gnat
Gnat

Reputation: 2921

It's possible that the file is locked or that the user privileges under which the Java program is running don't allow access to that file.

If the file is actually there, then the file being locked (e.g. being held open for writing by another process) is probably the reason. The documentation for FileReader says that it will throw FileNotFoundException if "the named file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading."

Upvotes: 1

Related Questions