Вывод у меня получается ровно такой как на примере:
[все тело первого файла]
[все тело второго файла]
В файлах записаны ровно такие же строки (если это важно).
При этом я заметил, что если я копипастю адрес файлов, то вылетает NullPointerException на строке 74, то есть каким-то образом в fis ничего не передается. А если ввожу адрес вручную, то вывод правильный.
package com.javarush.task.task16.task1630;
import java.io.*;
public class Solution {
public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static String firstFileName;
public static String secondFileName;
static {
try {
firstFileName = reader.readLine();
secondFileName = reader.readLine();
} catch (IOException e) { }
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
systemOutPrintln(firstFileName);
systemOutPrintln(secondFileName);
}
public static void systemOutPrintln(String fileName) throws InterruptedException {
ReadFileInterface f = new ReadFileThread();
f.setFileName(fileName);
f.start();
f.join();
System.out.println(f.getFileContent());
}
public interface ReadFileInterface {
void setFileName(String fullFileName);
String getFileContent();
void join() throws InterruptedException;
void start();
}
public static class ReadFileThread extends Thread implements ReadFileInterface {
String fileName;
String fileContent = "";
public void setFileName(String fullFileName){
fileName = fullFileName;
}
public String getFileContent() {
return fileContent;
}
public void run() {
FileInputStream fis = null;
InputStreamReader isr = null;
try {
int b;
fis = new FileInputStream(fileName);
isr = new InputStreamReader(fis);
while ((b = isr.read())!=-1) {
fileContent += (char)b;
}
} catch (IOException e) {}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}