Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用';以'开头;在爪哇_Java_File_Variables_Startswith - Fatal编程技术网

Java 如何使用';以'开头;在爪哇

Java 如何使用';以'开头;在爪哇,java,file,variables,startswith,Java,File,Variables,Startswith,我正在尝试根据excel工作表中的变量查找文件。每当我使用下面的代码时,我都会收到错误消息“在封闭范围内定义的局部变量CaseID必须是final或实际上是final”。我还是个新手,所以我不知道如何解决这个问题,尽管听起来很简单 File dir = new File("C:\\Users\\Z246379\\Documents\\Test beds"); FilenameFilter filter = new FilenameFilter() { public boolean accept

我正在尝试根据excel工作表中的变量查找文件。每当我使用下面的代码时,我都会收到错误消息“在封闭范围内定义的局部变量CaseID必须是final或实际上是final”。我还是个新手,所以我不知道如何解决这个问题,尽管听起来很简单

File dir = new File("C:\\Users\\Z246379\\Documents\\Test beds");
FilenameFilter filter = new FilenameFilter() {
 public boolean accept (File dir, String name) { 
   return name.startsWith(CaseID); //the error is on CaseID
} 
 }; 
 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);
 } 
}
File dir=新文件(“C:\\Users\\Z246379\\Documents\\testbeds”);
FilenameFilter筛选器=新建FilenameFilter(){
公共布尔接受(文件目录,字符串名称){
返回name.startsWith(CaseID);//错误在CaseID上
} 
}; 
String[]children=dir.list(过滤器);
if(children==null){
System.out.println(“目录不存在或不是目录”);
}否则{
for(int i=0;i
您只能访问匿名类实例中的最终对象。为了理解为什么会这样,让我们看看如果不是这样的话会发生什么

内部匿名类实例即使在创建它们的方法返回后也可以保留在内存中。当方法返回时,局部变量超出范围。如果您的方法提前返回,这将是有问题的。因此,为了避免这种对局部变量的依赖,匿名类实例实际上使用了局部变量的副本。因为,我们使用复制品,所以原作是否被销毁并不重要

但另一个问题来了。由于我们使用的是副本,如果更改局部变量的值,它将不会反映在匿名类实例中。这可能会导致一些真正意想不到的行为,并可能造成混乱


所以我们只需要使用最终变量来解决这个问题。从Java8开始,还有“隐式最终”变量的概念。所以,您不需要每次都显式地编写final。如果你在Java8上,用谷歌搜索这个。但一般来说,当某个内容是最终的时,最好是明确的。

正如它所说的,在匿名类中使用
CaseID
(顺便说一句,它应该是
CaseID
),它必须是最终的或有效的最终的(即只分配一次)。您还没有展示如何创建
caseId
,因此我无法说明需要更改哪些内容才能实现这一点……很抱歉,我忘了包含这些内容。String CaseID=Sheet1.getRow(2.getCell(2.getStringCellValue();显示所有代码-如果这是分配给您的
caseId
的唯一一行,您将不会收到该错误…好的,谢谢!我在这里上传了完整的代码。