扫描程序检测文件末尾Java

时间:2017-12-04 13:51:05

标签: java java.util.scanner

我正在尝试从文本文件中读取数据并将其插入到数组中,文件中的一个行间隙意味着将创建一个新数组。应关闭两条线和扫描仪。这是文本文件:

`Test
test
test
Telephone
Cardiology

Test Doctor 2
Test
20 Test
Telephone
Cardiology
`


  public Object[][] readData() throws FileNotFoundException{
  Scanner sc = new Scanner(new File("DoctorRecordsFile.txt"));
  String line;
  int emptyFile = 0 ;

  int i = 0;
  int x = 0;
  String[][] doctor = new String[100][5];
  while (emptyFile <= 1){
  line = sc.nextLine() ;

  if ((!line.isEmpty())){
        doctor[i][x] = line;
        System.out.println(doctor[i][x]);

        x++;
        emptyFile = 0;   
  }
  else{
      System.out.println("PRE call emptyFile: " + emptyFile);
       emptyFile++;
      System.out.println("Post call emptyFile: " + emptyFile);
    if(emptyFile >= 2){
       sc.close();
    }
    else{
       i++;
       x = 0;
    }
    }
  }
  return new Object[][]{doctor[0]};

我期望的实际结果是扫描仪会关闭并停止读取数据,这是我的控制台错误:

at java.util.Scanner.nextLine(Scanner.java:1540)
    at medicalsystem.ReadInDoctors.readData(ReadInDoctors.java:35)
    at medicalsystem.MainMenu.View_Doctor_ButtonActionPerformed(MainMenu.java:193)

2 个答案:

答案 0 :(得分:1)

正在寻找这个? https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextLine()

它应该包含在您的while语句中。这样您就不需要 fun_dens_spe_pm<-function (donnees_dens_sp_1,pm_peche){ dens_sp<-subset(donnees_dens_sp_1, donnees_dens_sp_1$CodeOnema == pm_peche) dens_sp$Espece<-as.character(dens_sp$nom_sp) list_sp_pm<-as.list(unique(dens_sp$nom_sp)) # # Test # Esp<-list_sp_pm[[1]] dens_par_sp<-function (dens_sp, Esp){ # Selection de l'espèce i présente sur la station dens_sp_i<-subset(dens_sp,dens_sp$nom_sp == Esp) # Selection des champs pour création des graphiques dens_sp_i<- dens_sp_i[,c("CodeOnema","Date","densite_sp")] dens_sp_i$Date<-as.numeric(dens_sp_i$Date) # Test du nombre d'années ou l'espèce i est présente sur la chronique ifelse( # Condition : présence de l'espèce inférieure ou égale à 2 années nrow(dens_sp_i) <= 2, # Si oui : Graphique si présence "excetpionnelle" d'une espèce p_dens_sp_pm <- ggplot(data = dens_sp_i, aes(x= Date, y = densite_sp)) + geom_point(size = 3,col = "firebrick") + geom_text(aes(x= Date, y = densite_sp,fill = densite_sp), label=paste0("Présence exceptionnelle de l'espèce en","",Date), color="firebrick") + scale_x_continuous(breaks = scales::pretty_breaks(n = 6))+ scale_y_continuous(breaks = scales::pretty_breaks(n = 12))+ labs(x="Années",y ="Densité spécifique (ind/100 m2)") + theme(text = element_text(size=11),plot.title = element_text(hjust = 0.5),legend.position="none")+ ggtitle(paste0("Evolution de la densité de l'espèce"," ",Esp," ", "sur la station"," ",pm_peche)), # Si non : Graphique si présence "continue" sur la série temporelle p_dens_sp_pm<-ggplot(data = dens_sp_i, aes(x= Date, y = densite_sp,fill = densite_sp)) + geom_line(size = 1,col = "dodgerblue2",linejoin = "round")+ geom_point(size = 3,col = "firebrick") + scale_x_continuous(breaks = scales::pretty_breaks(n = 6))+ scale_y_continuous(breaks = scales::pretty_breaks(n = 12))+ labs(x="Années",y ="Densité spécifique (ind/100 m2)") + theme(text = element_text(size=11),plot.title = element_text(hjust = 0.5),legend.position="none")+ ggtitle(paste0("Evolution de la densité de l'espèce"," ",Esp," ", "sur la station"," ",pm_peche))) # Visualisation du graphique p_dens_sp_pm # Enregistrement du graphe nom_graphe <-paste0("Densité_sp","_",Esp,"_",pm_peche,".png") ggsave(plot = p_dens_sp_pm,filename = nom_graphe,device ="png", path = paste0("./EEE/graphes/sta_RHP_complete/indicateurs/densite_relative/",pm_peche), width = 25, height = 18, units = "cm") } # Boucle d'application de la fonction for (i in seq.int(list_sp_pm)) { graphe<-dens_par_sp(dens_sp,list_sp_pm[[i]]) } } 变量。

答案 1 :(得分:0)

我在文本文件中看不到两行空行。检查输入文件是否有另一行要读取怎么样?如下所示:

while (emptyFile <= 1) {

            if (sc.hasNextLine()) {
                line = sc.nextLine();

                if ((!line.isEmpty())) {
                    doctor[i][x] = line;
                    System.out.println(doctor[i][x]);

                    x++;
                    emptyFile = 0;
                } else {
                    System.out.println("PRE call emptyFile: " + emptyFile);
                    emptyFile++;
                    System.out.println("Post call emptyFile: " + emptyFile);
                    if (emptyFile >= 2) {
                        sc.close();
                    } else {
                        i++;
                        x = 0;
                    }
                }
            }
        }

注意我将你的代码包装在if语句中:&#34; if(sc.hasNextLine()){&#34;