try{ String fileName = "test"; Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://10.4.6.201:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem fs = FileSystem.get(conf); System.out.println("ss"); boolean exists = fs.exists(new Path(fileName)); System.out.println(exists); if(exists){ System.out.println("文件存在"); }else{ System.out.println("文件不存在"); } }catch (Exception e){ System.out.println("111"); e.printStackTrace(); }为什么不执行if判断
时间: 2024-01-14 08:02:57 浏览: 118
在你提供的代码中,判断文件是否存在的逻辑是正确的,问题可能出现在文件名的传递上。你传递的文件名是"test",如果这个文件名是一个相对路径,那么它指的是相对于当前用户目录的路径。如果当前用户目录并不是你期望的目录,那么就会导致文件判断出错。
你可以尝试使用绝对路径来指定文件名,例如:
```java
String fileName = "/user/hadoop/test.txt";
```
其中,`/user/hadoop`是HDFS中的一个目录,你需要根据实际情况来替换这个目录。如果你要访问的是本地文件系统,那么可以使用类似于`file:///path/to/file`的路径来指定文件名。
相关问题
try{ String fileName = "test"; Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://10.4.6.201:9000"); conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem fs = FileSystem.get(conf); System.out.println("ss"); boolean exists = fs.exists(new Path(fileName)); System.out.println(exists); if(exists){ System.out.println("文件存在"); }else{ System.out.println("文件不存在"); } }catch (Exception e){ System.out.println("111"); e.printStackTrace(); }为什么程序不结束
在你提供的代码中,程序没有结束可能有两种情况:
1. 代码中存在其他逻辑,导致程序没有结束。
在你提供的代码中,只有判断文件是否存在的逻辑,并没有其他代码,因此排除了这种情况。
2. Hadoop连接没有正确关闭,导致程序没有结束。
在你的代码中,你创建了一个`FileSystem`对象来连接Hadoop,但是没有显式地关闭这个连接。这样会导致连接资源没有正确释放,从而导致程序没有结束。你可以在代码最后添加`fs.close()`语句来关闭连接,例如:
```java
try {
String fileName = "test";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://10.4.6.201:9000");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
System.out.println("ss");
boolean exists = fs.exists(new Path(fileName));
System.out.println(exists);
if (exists) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
fs.close(); // 关闭连接
} catch (Exception e) {
System.out.println("111");
e.printStackTrace();
}
```
添加了`fs.close()`之后,程序应该就可以正常结束了。
以下程序源代码用于判断名为m的文件是否保存在了HDFS中: import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HDFSFileIfExist { public static void main(String[] args){ try{ String x = "____"; Configuration c = new Configuration(); c.set("fs.defaultFS", "hdfs://localhost:9000"); c.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem f = FileSystem.get(____); if(____.exists(new Path(____))){ System.out.println("文件存在"); }else{ System.out.println("文件不存在"); } }catch (Exception e){ e.printStackTrace(); } } } 请完成该程序源代码(从上向下,按顺序填写)。
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSFileIfExist {
public static void main(String[] args){
try{
String x = "m";
Configuration c = new Configuration();
c.set("fs.defaultFS", "hdfs://localhost:9000");
c.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem f = FileSystem.get(c);
if(f.exists(new Path("/" + x))){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
阅读全文