2017-02-11 37 views
1

У меня есть простая программа, которая читает в командах и выполняет их. RightNow У меня есть этот код для вставки определенного текста в текстовый файл:FileWriter неправильно записывает в каталог

Пример команды:

INSERT "John Smith" INTO college.student 

Мой главный метод:

else if(command.substring(0,6).equalsIgnoreCase("INSERT")){ 
     String string = command.substring(7, command.indexOf("INTO") - 1); 
     String DBNameTBName = command.substring(command.indexOf("INTO") + 5); 
     String tableName = DBNameTBName.substring(DBNameTBName.indexOf(".") + 1); 
     String DBName = DBNameTBName.substring(0, DBNameTBName.indexOf(".")); 

     if(DBCommands.insert(string, DBName, tableName)){ 
      statfileWriter.println("Inserted " + string + " into table " + tableName + " in " + DBName); 
      statfileWriter.println("(" + command + ")"); 
      statfileWriter.flush(); 
     } 
     else{ 
      errfileWriter.println("Error: Could not insert " + string + " into table " + tableName + " in " + DBName); 
      errfileWriter.println("(" + command + ")"); 
      errfileWriter.flush(); 
     }  

И метод вставки он называет:

public static boolean insert(String string, String DBName, String tableName){ 
    try{ 
     string = string.substring(string.indexOf('"') + 1, string.lastIndexOf('"')); //removes quotes 

     File tableToWriteTo = new File(DBName + "/" + tableName + ".txt"); 
     if (!tableToWriteTo.exists()){ 
      return false; 
     } 

     PrintWriter writer = new PrintWriter(new FileWriter 
        (tableToWriteTo, true)); 
     writer.println(string); 
     writer.close(); 
     return true; 
    } 
    catch(Exception e){ 

     return false; 
    } 

} 

Я получаю очень странное поведение с помощью метода вставки. Он возвращает true, поскольку он всегда печатает в моем журнале состояния, а не в журнале ошибок. Я знаю, что метод создания файла .txt работает отлично, я тестировал его много раз, и файл student.txt всегда присутствует. С моей командой вставки, если изменить файл = новую строку файла на это:

File tableToWriteTo = new File(tableName + ".txt"); 

Тогда неудивительно создает .txt файл с именем «студент» с моей командой, например, но не в папке «DBName». Если бы я изменить его к этому:

File tableToWriteTo = new File(DBName + "/" + tableName); 

Затем он создает файл с именем «студент» без какого-либо типа (как, Windows спрашивает, что я хочу, чтобы открыть его), но ставит в строке, я хочу, чтобы вставить Это. Я должен отметить, что если есть несколько команд INSERT, тогда он записывает все строки, как мне бы хотелось.

Я пробовал объявить PrintWriter и File в моем основном методе и передать их, но это тоже не сработает.

Как я могу получить его для записи в students.txt в каталоге колледжа?

EDIT: О, боже мой, я самый глупый человек на Земле. Я не смотрел полный список команд, которые я получил для этого задания, и я забыл, что есть команда delete, и они были ОБЫЧНЫ. Я бы удалил этот вопрос, но я оставлю это на случай, если кто-то в будущем захочет увидеть пример FileWriter.

ответ

1

Я изменил условие if в методе insert. Файл не ожидается. Поэтому в идеале это условие нельзя отрицать. Я использовал следующий код, и он работает для меня.

public class InsertToWriteTo { 

    public static void main(String[] args) { 
     boolean ret = insert("\"hello\"", "college", "student"); 
     System.out.println(ret); 
    } 

    public static boolean insert(String string, String DBName, String tableName) { 
     try { 
      string = string.substring(string.indexOf('"') + 1, string.lastIndexOf('"')); // removes quotes 

      File tableToWriteTo = new File(DBName + "/" + tableName + ".txt"); 
      if (tableToWriteTo.exists()) { // changed condition 
       System.out.println("File exists"); 
       return false; 
      } 

      PrintWriter writer = new PrintWriter(new FileWriter(tableToWriteTo, true)); 
      writer.println(string); 
      writer.close(); 
      return true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 

    } 
} 

Надеется, что это помогает!

+0

Спасибо, но оказалось, что я просто был немым. Я не просмотрел полный список команд для этого задания и не заметил, что еще была команда DELETE, и я уже применил этот метод, и они фактически работали. Оцените усилия, хотя, спасибо – Johnny