У меня есть простая программа, которая читает в командах и выполняет их. 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.
Спасибо, но оказалось, что я просто был немым. Я не просмотрел полный список команд для этого задания и не заметил, что еще была команда DELETE, и я уже применил этот метод, и они фактически работали. Оцените усилия, хотя, спасибо – Johnny