从CSV读取数据时,它会跳过第二行。我有两个CSV文件,一个用于用户,一个用于属性-密钥ID是user。
String userName; static String breakLine = "\n--------------------\n"; /** * Method to create a new user in a CSV File * @param sFileName * @param user */ static void writeToCsvFile(String sFileName, User user) { try { FileWriter writer = new FileWriter(sFileName, true); writer.append(user.displayUserName()); // get username from userinput writer.append(","); // tabs to next record writer.append(user.getPassword()); //gets password from userinput writer.append(","); //tabs to next record writer.append("\n"); writer.flush(); writer.close(); System.out.print("\nUser Successfully Created\n"); } catch(IOException e) { e.printStackTrace(); } } /** * Class to read User information from specified CSV file * @param sFileName * @param user * @throws FileNotFoundException */ static boolean readFromCsvFile(String sFileName, User user) throws FileNotFoundException { String thisLine; BufferedReader reader = new BufferedReader(new FileReader(sFileName)); try { // thisLine = reader.readLine(); //System.out.print(thisLine); while((thisLine = reader.readLine()) != null) { String userDetails[] = thisLine.split(","); if ((user.displayUserName().equals(userDetails[0]))) { System.out.print("\nUser <-" + user.displayUserName() + " -> exists! Logging In\n\n"); return true; } else if ((thisLine = reader.readLine()) == null) { System.out.print("\nNo User Details Matching Those Entered Exist. Please Register or Recheck Details."); return false; } } } catch(IOException e) { System.out.print("\nUser does not exist\n"); e.printStackTrace(); return false; } finally{ try { reader.close(); }catch (IOException e){}} return false; } static void writeToPropertyFile(String sFileName, Property property) { try { FileWriter writer = new FileWriter(sFileName, true); writer.append(property.getUser()); // get username from userinput writer.append(","); // tabs to next record writer.append(property.getAddress()); //gets address from userinput writer.append(","); //tabs to next record writer.append(property.getValue()); //gets property value from userinput writer.append(","); //tabs to next record writer.append(property.getLocation()); //gets property type from userinput writer.append(","); //tabs to next record writer.append(property.getResidenceStatus()); //gets residence status from userinput writer.append(","); //tabs to next record writer.append(property.getPaymentStatus()); //gets payment status from userinput writer.append(","); //tabs to next record writer.append(property.totalTax(property.privateResidence)); writer.append(","); writer.append("\n"); writer.flush(); writer.close(); System.out.print("\nProperty Successfully Saved to " + property.getUser() + "\n"); } catch(IOException e) { e.printStackTrace(); } } /** * Method to read and print all properties belonging to a user * @param sFileName * @param property * @param userName * @throws FileNotFoundException */ static void readFromPropertyFile(String sFileName, String userName) throws FileNotFoundException { String thisLine; BufferedReader reader = new BufferedReader(new FileReader(sFileName)); try { //thisLine = reader.readLine(); //skips first line in CSV while((thisLine = reader.readLine()) != null) { String propertyDetails[] = thisLine.split(","); if (propertyDetails[0].equals(userName)) { System.out.print("\nUser: " + propertyDetails[0] + "\nAddress: " + propertyDetails[1] + "\nEst. Value: " + propertyDetails[2] + "\nLocation Cat: " + propertyDetails[3] + "\nPrivate Residence: " + propertyDetails[4] + "\nTax Paid: " + propertyDetails[5] + "\nTax Due: " + propertyDetails[6] + breakLine); } else if ((thisLine = reader.readLine()) == null) System.out.print("\nNo Further Properties Found For This User\n"); } } catch(IOException e) { System.out.print("\nProperties do not exist\n"); e.printStackTrace(); } finally{ try { reader.close(); }catch (IOException e){}} } }
我与以下用户一起运行
Chris,password Michelle,password Zach,password etc (on seperate lines, seperated by appending \n at the end of the input stage)
每个奇数编号都在工作,并且检测到用户已登录,而第二个奇数编号正在跳过。我阅读了一下,但我不认为我有.nextLine()正在像此链接中那样跳过,但是我只在星期五开始使用CSV和BufferedReader!
它跳过第二行,因为您在每次迭代中都读取两行,并且仅使用奇数行。
我建议改为使用
while ((thisLine = reader.readLine()) != null) { // only read once per loop. String propertyDetails[] = thisLine.split(","); if (propertyDetails[0].equals(userName)) { System.out.print("\nUser: " + propertyDetails[0] + "\nAddress: " + propertyDetails[1] + "\nEst. Value: " + propertyDetails[2] + "\nLocation Cat: " + propertyDetails[3] + "\nPrivate Residence: " + propertyDetails[4] + "\nTax Paid: " + propertyDetails[5] + "\nTax Due: " + propertyDetails[6] + breakLine); } } // out side the loop. System.out.print("\nNo Further Properties Found For This User\n");