Есть код в main
File fileToRead = getFileName();
File fileToWrite = getFileName();
Есть метод
private static File getFileName() throws IOException {
try (BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in))) {
String fileName = consoleReader.readLine();
return new File(fileName);
} catch (IOException ioe){
throw new IOException("Console reading failed",ioe);
}
}
При первом вызове все считывает - поток закрывает(как позже выяснится).
При втором вызове сыпется с исключением ибо поток закрыт.
Вопрос - разве поток я создаю не в скоупе метода? Не должен ли при втором вызове быть создан совсем другой объект, соответственно связан с совсем другим потоком?
UPD
Стоп, я так понимаю я закрыл поток в статической переменной in?
Ну и по самой задаче - видимо опять что-то упускаюpackage com.javarush.task.task19.task1910;
/*
Пунктуация
*/
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) throws IOException {
File[] files = getFiles(2);
String dataFromFile = readFileContentAsString(files[0]);
Pattern pattern = Pattern.compile("[\\pP\\s]+");
Matcher matcher = pattern.matcher(dataFromFile);
String processedString = matcher.replaceAll("");
writeFormatedStringToFile(processedString,files[1]);
}
private static File[] getFiles(int quantity) throws IOException {
BufferedReader consoleReader = null;
try {
consoleReader = new BufferedReader(new InputStreamReader(System.in));
File[] files = new File[quantity];
for(int i=0 ; i<quantity; i++){
files[i] = new File(consoleReader.readLine());
}
return files;
} catch (IOException ioe){
throw new IOException("Console reading failed",ioe);
} finally {
if(consoleReader!=null){
consoleReader.close();
}
}
}
private static String readFileContentAsString(File file) throws IOException {
try (BufferedReader fileReader = new BufferedReader(new FileReader(file))) {
StringBuilder fileStringBuilder = new StringBuilder();
String stringRead;
while (fileReader.ready() &&
(stringRead = fileReader.readLine()) != null){
fileStringBuilder.append(stringRead);
}
return fileStringBuilder.toString();
} catch (IOException ioe){
throw new IOException("Failed to read file",ioe);
}
}
private static void writeFormatedStringToFile(String stringFromFile, File file) throws IOException {
try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file))) {
fileWriter.write(stringFromFile);
} catch (IOException ioe){
throw new IOException("Failed to write file",ioe);
}
}
}