如何在 Java 中使用“Startswith”变量查找文件

2023-12-02

我试图根据每次迭代从 Excel 工作表中提取的前 8 个数字找到一个文件。每当我使用下面的代码时,我都会收到错误消息“封闭范围中定义的局部变量 CaseID 必须是最终的或有效的最终”。我还是个新手,所以我不确定如何解决这个问题,尽管这听起来像是一个简单的修复。问题发生在代码底部的 caseID 变量上。

  package Chrome;
    //CHROME
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FilenameFilter;

    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DataFormatter;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;


    public class ValidateInput {

    public static void main(String[] args) throws Throwable {
    // TODO Auto-generated method stub

    // String filePath=System.getProperty("user.dir")+"\\UP.xlsx";
    //File src = new File(filePath);    
    //System.out.println(filePath);
    File src = new File("C:\\Users\\Z246379\\Documents\\TestDataFolder\\ValidateInput.xlsx");          
    FileInputStream fis = new FileInputStream(src);        



    XSSFWorkbook wb = new XSSFWorkbook(fis);        
    XSSFSheet Sheet1 = wb.getSheetAt(0);
    int i1 = 2;
    //Username
    String data0 = Sheet1.getRow(2).getCell(0).getStringCellValue();
    //Password    
    String data01 = Sheet1.getRow(2).getCell(1).getStringCellValue();
    //Case ID
    String caseID = Sheet1.getRow(i1).getCell(2).getStringCellValue();
    // Description
   String Desc = Sheet1.getRow(2).getCell(3).getStringCellValue();
   //Internal Claim File
   String ICF = Sheet1.getRow(1).getCell(4).getStringCellValue();
    String CRPT = Sheet1.getRow(1).getCell(5).getStringCellValue();

    // final String caseID1 = caseID1;




    //Chrome driver code

     System.out.println("Called openBrowser");
     String exePath = System.getProperty("user.dir")+"\\chromedriver.exe";
     System.setProperty("webdriver.chrome.driver", exePath);
     ChromeOptions options = new ChromeOptions();
     options.setExperimentalOption("useAutomationExtension", false);
     options.addArguments("start-maximized");
     options.addArguments("--no-sandbox");
     options.addArguments("--disable-extensions-except");
     options.addArguments("disable-extensions");
     //options.setExperimentalOption("useAutomationExtension", false); 
     WebDriver driver = new ChromeDriver(options);
     driver.get("https://client.abc.com");


     //Logging in       
     driver.findElement(By.xpath("//input[@id='userid']")).sendKeys(data0);
     driver.findElement(By.xpath("//body[@class='no-nav']/div[@id='wrapper']/header[@class='header']/div[@class='container']/div[@class='menu']/div[@class='drop']/div[@class='login-form']/form[@method='POST']/div[2]/input[1]")).sendKeys(data01);
     driver.findElement(By.xpath("//input[@value='Sign In']")).click();
     Thread.sleep(2000);
     //Navigate to Validate Input
     driver.findElement(By.xpath("//span[@class='wpsNavLevel2'][contains(text(),'EZ-Test')]")).click();
     Thread.sleep(3000);
     driver.get("https://ezt.abc.com/Test/inputFiles/selectValidateInput/selectValidateInput.xhtml");

     while (caseID != null)
          {

      caseID = Sheet1.getRow(i1).getCell(2).getStringCellValue();
      //Input Validate Input stuff

      driver.findElement(By.xpath("//input[@id='mainForm:caseId']")).sendKeys(caseID);
    driver.findElement(By.xpath("//input[@id='mainForm:testBedDesc']")).sendKeys(Desc);
      driver.findElement(By.xpath("//select[@id='mainForm:customRptOptions']")).sendKeys(ICF);
     driver.findElement(By.xpath("//span[@id='mainForm:customReportLabel']")).click();




      File dir = new File("C:\\Users\\Z333379\\Documents\\Test beds");
      FilenameFilter filter = new FilenameFilter() {
      public boolean accept (File dir, String name) { 
       return name.startsWith(caseID); //this is where i get the error. its not letting me make case ID a variable. but i really need the starts with stuff
       } 
     }; 
     String[] children = dir.list(filter);
     if (children == null) {
        System.out.println("Either dir does not exist or is not a directory"); 
     } else { 
       for (int i=0; i< children.length; i++) {
       String filename = children[i];
       System.out.println(filename);
            driver.findElement(By.xpath("//input[@id='mainForm:comprehensive']")).sendKeys("C:\\Users\\Z246379\\Documents\\Test beds\\" + filename);
        } 
     } 

     driver.findElement(By.xpath("//button[@id='mainForm:reset']")).click();


     i1=i1+1;
          }

      }
    }

Here:

FilenameFilter filter = new FilenameFilter() {
    public boolean accept (File dir, String name) { 
        return name.startsWith(caseID);
    } 
};

您不能在内部局部类的定义中使用可变变量。这就是您收到编译器错误的原因。

创建一个临时变量并赋值caseID在那里,在您的内部局部类中使用此变量:

final String localCaseID = caseID;
FilenameFilter filter = new FilenameFilter() {
    public boolean accept (File dir, String name) { 
        return name.startsWith(localCaseID);
    } 
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中使用“Startswith”变量查找文件 的相关文章

随机推荐

  • 控制器 cakephp 2 中的全局变量

    在控制器中使用全局变量的方法是什么 我尝试使用 beforeFilter 来执行此操作 但无法从其他函数访问它 只能使用来完成吗Configure read and Configure write 您可以在 AppController 中的
  • C++ 非法数字,简单问题

    我正在运行这个错误 int temp 0789 error C2041 illegal digit 8 for base 8 据我所知 编译器将任何以 0 开头的数字 例如 0123 理解为八进制 但是我怎样才能告诉编译器只接受前面的 0
  • ncurses:奇怪的行格式

    我有这个代码可以与 ncurses 一起使用 include
  • 删除行(向后工作),但使用范围变量?

    通常 您需要浏览一系列单元格 并根据某些条件删除整行 在实践中 最好从end范围内 然后进行工作 Dim i as Long For i lastRow to 1 Step 1 If Cells i 2 Value del then Row
  • 仅显示 Google 地图中特定城市的标签

    我有连接地图上两点的折线 我想仅显示这两点的标签 并隐藏所有其他标签 我探索了 Google 地图 API 以了解样式地图的工作原理 使用隐藏功能 我可以实现各种粒度的标签隐藏和显示 但我未能实现仅显示两个城市标签 例如 如果我有一条连接圣
  • 在 Mongoose 中计算平均值

    我正在尝试计算评论中所有评分的平均值 但结果 平均值始终为 0 我不知道问题是什么 这是我的产品架构 var productSchema new Schema id String Rating type Number default 0 C
  • ADAL:请求正文必须包含以下参数:client_secret

    我使用 ADAL for android 编写了下面的身份验证代码 mAuthContext new AuthenticationContext MainActivity this Constants AUTHORITY URL false
  • File.createNewFile() 随机失败

    我构建了一个简单的测试 它在无限循环中创建和删除文件 名称不变 该测试确实运行了几秒钟 有时超过 77 000 次迭代 然后失败并出现以下异常 Exception in thread main java io IOException Acc
  • 如何在浏览器中强制刷新 javascript 文件? [复制]

    这个问题在这里已经有答案了 我在正在构建的 Web 应用程序中使用了大量 JQuery KnockoutJS 和其他 JavaScript 内容 大多数 JS 都保存在自己的独立文件中 我遇到的问题是浏览器会缓存这些文件 因此当我推送更改时
  • Django - 由于 csrf 令牌在 Windows 上不工作,AJAX 不工作

    我在 Linux 上开发了我的应用程序 AJAX 请求工作正常 我已将应用程序拉至 Windows 计算机 但 AJAX 请求失败 我只收到 403 Forbidden 错误 从网上查了一下 我认为是csrf token的问题 在Linux
  • 根据给定的出生日期计算年龄

    我有 2 个组合框和 2 个文本框 我的第一个组合框包含一月 二月等格式的月份 另一个组合框包含从 1 到 31 的数字 我的第一个文本框是txtyear 一旦用户输入出生年份txtyear一个变量BOD将等于这个 Dim BOD as s
  • 如何获取当前系统时间(以毫秒或纳秒为单位)?

    Unix time 返回秒数 如何获得以毫秒或纳秒为单位的时间 Thanks Try Unix gettimeofday Unix time float 1447865942 Unix gettimeofday float 14478659
  • MySQL 内连接来自另一个表的计数

    我正在尝试做一个SELECTMySQL 中的查询也将执行count在另一个表中和join答案写进我最初的table Table people 编号 名称 头发颜色 工作编号 Table job 编号 工作名称 SELECT FROM job
  • HTTP 无法注册 URL http://+:8000/HelloWCF/。您的进程没有此命名空间的访问权限

    我是 WCF 的初学者 但正在努力提高我的经验 第一步我就遇到了问题 我创建了最简单的 WCF 服务 代码清单 所有代码在一个文件中 using System using System ServiceModel namespace Esse
  • 标签和色叶树状图

    我正在尝试创建一个树状图 我的样本是否有 5 个组代码 充当样本名称 物种 等 但其重复 因此 我有两个问题需要帮助 如何在叶标签中显示组代码 而不是样品编号 我希望为每个代码组分配一种颜色 并根据它为叶子标签着色 它们可能不属于同一分支
  • 如何将 jsfiddle.net 的代码放入我的网站?

    我一直在尝试在网页底部创建一个小框 当滚动时它会展开 弹出 然后当鼠标移开时再次关闭 我找到了这个post带有 jsfiddle net 的链接 我一直在摆弄它 并创建了一些在 JSFiddle 上查看时完全按照我想要的方式工作的东西 但是
  • 将本地 JSON 加载到 AngularJS 中的 Jasmine/Karma 单元测试中

    我正在测试一个回调函数 它接受响应对象作为唯一的参数 该对象是在其他地方发出的 HTTP 请求的响应 因此我不想在此测试中使用 httpBackend 因为该请求与此函数无关 它位于 home js 中 它是我的应用程序主页的控制器 这是正
  • 使用ggplot2如何表示图例中的点和线

    使用 ggplot2 我正在绘制几个函数和一系列点 我不知道如何表示图例上的点 我意识到我需要使用 aes 函数 但我不完全理解如何做到这一点 我很抱歉这个例子太长了 但我不知道如何来说明它 add ggplot2 library ggpl
  • 为什么会出现此错误:冲突的 getline 类型

    有人可以看一下这个并告诉我出了什么问题吗 我有3个错误 error Conflicting types for getline error too few arguments to function call expected 3 have
  • 如何在 Java 中使用“Startswith”变量查找文件

    我试图根据每次迭代从 Excel 工作表中提取的前 8 个数字找到一个文件 每当我使用下面的代码时 我都会收到错误消息 封闭范围中定义的局部变量 CaseID 必须是最终的或有效的最终 我还是个新手 所以我不确定如何解决这个问题 尽管这听起