2017-01-09 6 views
1
inputFileName = "2.txt"; 
    outputFileName = "3.txt"; 

    inputFile = new BufferedReader(new FileReader(inputFileName)); 
    outputFile = new PrintWriter(new FileWriter(outputFileName)); 

    String lineOfText = inputFile.readLine(); 

    while (lineOfText != null) 
    { 
     if (lineOfText.contains("x")) 
     { 
      lineOfText = lineOfText.replaceAll("x"+ ".*", ""); 
     } 
     outputFile.println(lineOfText); 
     lineOfText = inputFile.readLine(); 
    } 

    inputFile.close(); 
    outputFile.close(); 

Здравствуйте, прямо сейчас у меня есть вход и выход, это означает, что у меня есть две попытки и два улова блоков (там может быть ошибка подключения к предыдущему файлу и записи второго файла). Или мне нужен только один блок try?бросать и ловить IOException

Если да, то каким образом я мог бы реализовать блоки try и catch?

+0

Это зависит от вас, но определенно будет проще использовать одну попытку/уловить весь фрагмент. – shmosel

+0

А я вижу. если я хочу использовать два блока try, как они будут реализованы в этом коде? – MasterCard

+0

Вам нужно будет окружить любой вызов, который вызывает «IOException» в блоке try/catch, и либо возвратить, либо установить некоторый логический флаг, чтобы указать на ошибку после выхода из блока. – shmosel

ответ

1

Я хотел бы использовать только один TRY/поймать/наконец-блок, написав:

try { 
    inputFile = new BufferedReader(new FileReader(inputFileName)); 
    outputFile = new PrintWriter(new FileWriter(outputFileName)); 
    String lineOfText = inputFile.readLine(); 
    while (lineOfText != null) 
    { 
     if (lineOfText.contains("x")) 
     { 
      lineOfText = lineOfText.replaceAll("x"+ ".*", ""); 
     } 
    outputFile.println(lineOfText); 
    lineOfText = inputFile.readLine(); 
    } 
} catch(IOException ioe) { 
     System.err.println("Caught IOException: " + e.getMessage()); 
} finally { 
    if(inputFile != null) 
     inputFile.close(); 
    if(outputFile != null) 
     outputFile.close(); 
} 

С помощью finally блока вы можете быть уверены, что Reader и Writer объект будет определенно закрыты.

+0

Спасибо! Что делает getMessage()? – MasterCard

+0

В основном возвращает точный стек, в котором произошло исключение в вашем коде. См. Больше в [JavaDoc] (https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#getMessage()) – ByteBiter

+1

'getMessage()' не возвращает трассировку стека , Для этого используйте 'printStackTrace()'. Кроме того, вы должны проверить значение null в своем блоке 'finally', если это не удалось во время строительства. Или см. Ответ @ DarshanMehta за предпочтительный подход. – shmosel

2

Я бы рекомендовал использовать try with resources блок Java 7, как показано в примере ниже, он будет заботиться о closing ресурсов, а также:

public static void main(String[] args) throws Exception { 
    String inputFileName = "2.txt"; 
    String outputFileName = "3.txt"; 
    try (BufferedReader inputFile = new BufferedReader(new FileReader(inputFileName)); 
      PrintWriter outputFile = new PrintWriter(new FileWriter(outputFileName));) { 
     String lineOfText = inputFile.readLine(); 

     while (lineOfText != null) { 
      if (lineOfText.contains("x")) { 
       lineOfText = lineOfText.replaceAll("x" + ".*", ""); 
      } 
      outputFile.println(lineOfText); 
      lineOfText = inputFile.readLine(); 
     } 
    }catch(Exception e){ 
     //Handle 
    } 
} 

Here документация для try with resources.

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

  • Нет связанных вопросов^_^