Получайте нуль при чтении текстового файла в Java с помощью буферизованного считывания
-
27-09-2019 - |
Вопрос
У меня проблема с чтением текстового файла в Java и присвоить его на массив. Программа работает, но я получаю нуль. Я попытался изменять код на самые простые, так как только вы видите ниже. Потому что этот надо действительно петлю через текстовый файл. Но я делаю это таким образом, чтобы я легко посмотрю, где проблема. Но проблема в том, что я не знаю, почему он все еще выводит NULL.
Файл, безусловно, в каталоге, который я указал, поскольку встроенный метод существует возвращено true, когда я проверяю его с помощью этого:
if(ofile.exists()==true){
System.out.println("exist");
}else{
System.out.println("not exist");
}
Пожалуйста, мне нужна помощь, определяя ошибку за этим, почему он возвращает NULL.
public static void main(String args[]){
String[] eq=new String[50];
String[]ea=new String[50];
String[]eb=new String[50];
String[] ec=new String[50];
String[]ed=new String[50];
char[] ans=new char[50];
String strtemp;
File ofile= new File("J:\\questions.txt");
BufferedInputStream bis= null;
FileInputStream fis= null;
DataInputStream dis=null;
int ii=0;
int score=0;
System.out.println(eq[1] + "\n" + ea[1] + "\n" + eb[1] + "\n" + ec[1] + "\n" + ed[1] + "\n" + "\n" + "Answer: ");
String strans=x.nextLine();
char y=strans.charAt(0);
if(y==ans[1]){
score++;
}else{
}
try{
fis=new FileInputStream(ofile);
bis=new BufferedInputStream(fis);
dis=new DataInputStream(bis);
while(dis.available()!=0){
eq[1]=dis.readLine(); ea[1]=dis.readLine();
eb[1]=dis.readLine(); ec[1]=dis.readLine();
ed[1]=dis.readLine(); strtemp=dis.readLine();
ans[1]=strtemp.charAt(0);
}
bis.close();
dis.close();
fis.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
Решение
Вот как вы читаете текстовый файл в Java с помощью буферреджера:
BufferedReader reader = null;
try {
reader = new BufferedReader( new FileReader( "J:\\questions.txt") );
String line = null;
do {
line = reader.readLine();
if( line != null ) {
// Do Something with line
}
} while( line != null );
} catch (Exception e) {
e.printStackTrace();
} finally {
if( reader != null )
try {
reader.close();
} catch (IOException e) {
}
}
Другие советы
Я думаю, что у меня была похожая проблема. Насколько я мог сказать dis.available
Возвращает 0 Даже если есть текст для чтения. Попробуйте прочитать что-то в буфере.
`Доступно" описано в JavadoC как
INT доступно () Возвращает оценку количества байтов, которые могут быть прочитаны (или пропущены) от этого входного потока, не блокируя следующим вызовом способа для этого входного потока.
Изначально будет 0, потому что вы еще не читали от этого. Не используйте available
для этого.