Как решить Java Ошибка "Система не может найти указанный путь"? - PullRequest
2 голосов
/ 08 декабря 2011

Я использую Mac OS X и код работает.Мой товарищ по команде работает под управлением Windows 7, и он получает сообщение об ошибке (хотя структура каталогов и файл существуют в его системе).Есть идеи?Я потратил несколько часов на это и не могу понять это.Спасибо.

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();
   }
}

Пользователи в Windows получили сообщение об ошибке при попытке выполнить процесс создания базы данных.Эта ошибка возникает даже тогда, когда путь и файл кажутся правильными, например, что возвращает следующий оператор System.out.println в файле (выделено ниже):

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);

Это пример того, что этооператор возвращает на компьютере Windows 7:

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

Это распечатывается, даже если ПОЛЬЗОВАТЕЛЬ имеет файл create_db_and_tables.sql, расположенный в папке src/files.

1 Ответ

1 голос
/ 08 декабря 2011

Возможно, файл заблокирован или пользовательские привилегии, под которыми работает Java-программа, не разрешают доступ к этому файлу.

Если файл действительно существует, то, вероятно, причиной является файл, заблокированный (например, открытый для записи другим процессом). Документация для FileReader гласит, что он выдаст FileNotFoundException, если «названный файл не существует, является каталогом, а не обычным файлом, или по какой-то другой причине не может быть открыт для чтения». *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...