This question already has answers here:
How to append text to an existing file in Java
                                
                                    (30个答案)
                                
                        
                                3年前关闭。
            
                    
此代码将遍历许多页面以查找和提取页面上的元素。一旦循环完成,它将从HashMap生成包含这些元素的日志文件,但是结果没有被附加,而是被覆盖。

        int d = new Integer(0);
        for (int i = 0; i <= 100; d += 10) {
            String url = Constants.FilterUrl + "&startIndex=" + d;
            this.getAuthors();
            driver.get(url);
            if (!driver.getPageSource().contains("h3")) break;
            }

        /* Send HashMap values to text file */
        File file = new File(Constants.FILEPATH + Constants.dateFormat.format(new Date()) + ".txt");

        try{
            if(!file.exists()){

                System.out.println("We had to make a new file.");
                file.createNewFile();
            }
                PrintWriter out = new PrintWriter(new FileWriter(file), true);
                map.forEach((k, v) -> out.println(k + ", " + v));
                out.append("************** " + "\n");
                out.close();
            } catch(IOException e) {
                System.out.println("COULD NOT LOG!!");
            }
}

public void getAuthors(){
    List<WebElement> allElements = driver.findElements(By.tagName("h3"));
    /* Create HashMap and store H3 elements in the key set */
    this.map = new HashMap<String, String>();
    for (WebElement element1 : allElements) {
        map.put(element1.getText(), element1.findElement(By.tagName("a")).getAttribute("href"));

    }

    /* Visit pages for H3 elements and retrieve names of the authors */
    for (Map.Entry<String, String> entry : map.entrySet()) {
        driver.get(entry.getValue());
        entry.setValue(driver.findElement(By.className("userlink-0")).getText());
    }
}


有任何想法吗?

最佳答案

map.put(element1.getText(),
  element1.findElement(By.tagName(“ a”))。getAttribute(“ href”));


如果HashMap中有任何与element1.getText()相同的文本,它将覆盖它。

同样,您正在为每个调用创建地图,它将每次创建一个新的Map,并导致早期内容的数据丢失。


/* Create HashMap and store H3 elements in the key set */
this.map = new HashMap<String, String>();



您应该在实例级别创建它。

为了生成唯一密钥,请在实例级别定义一个数字变量,并为每个放置次数递增。

long counter = 0;
 map.put(counter++, element1.findElement(By.tagName("a")).getAttribute("href"));


可能将HashMap更改为使用Key而不是String需要很长时间。

10-08 11:43