繁体   English   中英

以2个字符串传递值并将其从.txt文件中删除

[英]Passing values in 2 strings and removing them from a .txt file

我有一个问题,我要在2个字符串中传递2个值(Facebook用户名和Facebook密码),然后从.txt文件中删除它们。

这是我的代码:

private static String[] fbuser;
private static String[] fbpass;
FileReader fr;
BufferedReader br;
PrintWriter pw;     
String tmp;
int FileContentCount;
int noOfUsers = 3;

public void insertFacebookDetails() throws InterruptedException {

    fbuser = new String[noOfUsers];
    fbpass = new String[noOfUsers];

    String UserFileName = "fbusers.txt";

    try {           
        fr = new FileReader(UserFileName);
        br = new BufferedReader(fr);
        FileContentCount = 0;

        while ((tmp = br.readLine()) != null) {             
            fbuser[FileContentCount] = tmp;
            tmp = br.readLine();
            fbpass[FileContentCount] = tmp;
            FileContentCount++;             
        }
        br.close();
        fr.close();
        System.out.println(fbuser[0] + ": " + fbpass[0]);

        pw = new PrintWriter(UserFileName);
        int count = 1;
        while (count < FileContentCount) {
            pw.write(fbuser[count] + "\n");
            pw.write(fbpass[count] + "\n");
            count++;
        }
        pw.flush();
        pw.close();

    }
    catch (Exception e) {
        System.out.println(e);
    }       
    for (String fbLogin : driver.getWindowHandles()) {
        driver.switchTo().window(fbLogin);  
    }
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(EMAIL)));           
    driver.findElement(By.id(EMAIL)).sendKeys(fbuser);
    driver.findElement(By.id(PASSWORD)).sendKeys(fbpass);
    Thread.sleep(2000);
    driver.findElement(By.name(LOGIN)).click(); 
}

我的用户在.txt文件中的顺序是:

  • fb_user1
  • fb_pass1
  • fb_user2
  • fb_pass2
  • fb_user3
  • fb_pass3
  • fb_user4等

当它找到电子邮件ID时,实际上会发送3个用户(因为noOfUsers值为3),但是如果我输入一个比这个数字低的数字,它将无法正常工作。 (获取arrayoutofbounds错误)

第二个问题是它不会从.txt文件中删除用户。

我也不知道将以下代码放在哪里:

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(EMAIL)));           
driver.findElement(By.id(EMAIL)).sendKeys(fbuser);
driver.findElement(By.id(PASSWORD)).sendKeys(fbpass);
Thread.sleep(2000);
driver.findElement(By.name(LOGIN)).click(); 

我知道它需要在它读取后和删除它之前的某个位置。 我尝试了所有可能的方法,但我感到困惑。

谁能帮我吗?

编辑:这是代码在抽象类中的外观

public static void readFile() {
     try(BufferedReader reader = new BufferedReader(new FileReader(fileName))){
          String tmp;
          while((tmp = reader.readLine())!= null){
            fbUsers.add(tmp);
            System.out.println(tmp);
          }
          System.out.println(fbUsers.size());
        } catch (IOException e) {
            System.out.println(e);
        }
}

public static void writeFile() {
    try(BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))){
          for(String fbUser : fbUsers){
            writer.write(fbUser);
            writer.newLine();
          }
        } catch (IOException e) {
            System.out.println(e);
        }
}

@SuppressWarnings("unused")
public void insertFacebookDetails(String fbUser) throws InterruptedException {  
    readFile();
    for (String fbLogin : driver.getWindowHandles()) {
        driver.switchTo().window(fbLogin);  
    }
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(EMAIL)));   
    String username = fbUser.split("/")[0];
    String password = fbUser.split("/")[1];
    fbUsers.remove(fbUser);
    driver.findElement(By.id(EMAIL)).sendKeys(username);
    driver.findElement(By.id(PASSWORD)).sendKeys(password);
    Thread.sleep(2000);
    driver.findElement(By.name(LOGIN)).click(); 
    writeFile();
}

这是我在另一个类中调用方法的地方:

public void step1() {
   insertFacebookDetails(fbUsers.get(0));
}

这是一个示例,您可以如何从文件中读取用户并从登录文件中删除用户:
首先,将用户这样存储在fbusers.txt文件中:

fb_user1 / fb_pass1
fb_user2 / fb_pass2
fb_user3 / fb_pass3
等等...

然后,我们使用List<String>代替String[]因为它会自动展开。 因此,通过向其添加fbUsers不会得到arrayOutOfBounds异常。

首先,我们从文件中读取所有fbUsers:

public static void readFile(){
    try(BufferedReader reader = new BufferedReader(new FileReader(fileName))){
      String tmp;
      while((tmp = reader.readLine())!= null){
        fbUsers.add(tmp);
        System.out.println(tmp);
      }
    } catch (IOException e){
      e.printStackTrace();
    }
  }

因此,现在所有fbUsers都以以下格式存储在我们的列表中: fb_user1/fb_pass1

现在,我们将使用我们的fb_users之一登录:

public static void login(String fbUser){
    String userName = fbUser.split("/")[0]; //get UserName from fbUser
    String password = fbUser.split("/")[1]; //get Password from fbUser
    fbUsers.remove(fbUser); //remove the fbUser with which we have logged in

    //code to login
  }

最后,我们将fbUsers写入而没有在文件中重新登录的fbUsers:

public static void writeFile(){
    try(BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))){
      for(String fbUser : fbUsers){
        writer.write(fbUser);
        writer.newLine();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

这是主要方法:

private static final String fileName = "fbusers.txt";
private static final List<String> fbUsers = new ArrayList<>();

public static void main(String[] args){
    readFile();
    login(fbUsers.get(0));
    writeFile();
  }

希望它对您有所帮助,您可以继续进行本示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM