2016-07-07 5 views
-2

Я не могу понять это. В нижеприведенном методе я пытаюсь записать логическое значение в файл в 2-х местах, однако на самом деле ничего не написано. Любая помощь будет принята с благодарностью.Текст не записывается в файл

private void renameTables(){ 
    String path = MessengerMain.getInstance().getDataFolder() + File.separator + "v3-0-0 Table Rename.txt"; 
    File f = new File(path); 
    try(ResultSet rs = conn.getMetaData().getTables(null, null, "%", null); Writer w = new PrintWriter(new FileOutputStream(f, false))){ 
     if (!f.exists()){ 
      f.createNewFile(); 
      w.write("false"); 
      w.flush(); 
     } 

     List<String> lines = Files.readAllLines(Paths.get(path)); 
     if (lines.get(0).equalsIgnoreCase("false")){ 
      System.out.println("[Messenger] Verifying table names..."); 
      int count = 0; 
      List<String> tables = new ArrayList<String>(); 
      tables.add("messages"); 
      tables.add("scores"); 
      tables.add("contacts"); 
      while (rs.next()){ 
       String table = rs.getString("TABLE_NAME"); 
       if (tables.contains(table)){ 
        update("ALTER TABLE " + table + " RENAME TO " + ("messenger_" + table) + ";"); 
        count++; 
       } 
      } 
      if (count > 0){ 
       System.out.println("[Messenger] Done. " + count + " table" + (count == 1 ? "" : "s") + " renamed."); 
      }else{ 
       System.out.println("[Messenger] Done. No tables need to be renamed."); 
      } 
      w.write("true"); 
      w.flush(); 
     } 
    } catch (SQLException | IOException e){ 
     e.printStackTrace(); 
    } 
} 

Следуя совету Elliot Фриша (те же результаты):

private void renameTables(){ 
    String path = MessengerMain.getInstance().getDataFolder() + File.separator + "v3-0-0 Table Rename.txt"; 
    File f = new File(path); 
    try(ResultSet rs = conn.getMetaData().getTables(null, null, "%", null)){ 
     Writer w = new PrintWriter(new FileOutputStream(f, false)); 
     if (!f.exists()){ 
      f.createNewFile(); 
      w.write("false"); 
      w.close(); //close here 
     } 

     List<String> lines = Files.readAllLines(Paths.get(path)); 
     if (lines.get(0).equalsIgnoreCase("false")){ 
      System.out.println("[Messenger] Verifying table names..."); 
      int count = 0; 
      List<String> tables = new ArrayList<String>(); 
      tables.add("messages"); 
      tables.add("scores"); 
      tables.add("contacts"); 
      while (rs.next()){ 
       String table = rs.getString("TABLE_NAME"); 
       if (tables.contains(table)){ 
        update("ALTER TABLE " + table + " RENAME TO " + ("messenger_" + table) + ";"); 
        count++; 
       } 
      } 
      if (count > 0){ 
       System.out.println("[Messenger] Done. " + count + " table" + (count == 1 ? "" : "s") + " renamed."); 
      }else{ 
       System.out.println("[Messenger] Done. No tables need to be renamed."); 
      } 
      w = new PrintWriter(new FileOutputStream(f, false)); //create a new writer 
      w.write("true"); 
      w.close(); //close here 
     } 
    } catch (SQLException | IOException e){ 
     e.printStackTrace(); 
    } 
} 
+2

У вас попытался пройти через отладку э? Вы уверены, что эти заявления достигнуты? –

+1

Рассмотрите: вы просите нас изучить значительный объем кода для его отладки путем проверки, не предоставляя что-то, что мы можем скомпилировать и запустить. Вы, с другой стороны, можете запускать свою программу и проходить через нее в отладчике и, возможно, самостоятельно найти проблему. –

+0

Да, файл создается, и я получаю сообщение об ошибке, когда пытаюсь читать из файла, потому что там ничего нет. –

ответ

1

Здесь вы сможете найти работающий полный minimal, complete, verifiable example

public static void main(String[] args) { 
    File f = new File(System.getProperty("user.home"), "temp.txt"); 
    String path = f.getPath(); 
    try (Writer w = new FileWriter(f)) { 
     w.write("false"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     List<String> lines = Files.readAllLines(Paths.get(path)); 
     System.out.println(lines); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Выход (как и ожидалось)

[false] 
+0

Разве это не то, что я делаю? –

+0

Минус всего, что мы не можем проверить; Я могу только сделать вывод, что в ваших постах заявления не доходят. –

Смежные вопросы