从CSV中读取并跳过每隔一行。我有两个CSV文件,一个用于用户,一个用于属性 - 密钥ID是用户。
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!
答案 0 :(得分:4)
它跳过每一行,因为你在每次迭代中读取两行而只使用奇数行。
我建议改为使用
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");