java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。File类将文件,文件夹和路径封装成了对象,提供大量的方法来操作这些对象。
// 静态常量
static String pathSeparator // 与系统有关的路径分隔符
// Window操作系统,分隔符是分号;
// Linux操作系统,分隔符是冒号:
static String separator // 与系统有关的名称分隔符
// Window操作系统,名称分割符号为 \
// Linux操作系统,名称分隔符号为 /
// Windows绝对路径 Windows
String path1 = "E:\\study\\java\\5_projects\\FileClass\\test";
String path2 = "/opt/html/dist"
// 相对路径
String path3 = "FileClass\\test";
public File(String pathname)
// 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
public File(String parent, String child)
// 从父路径名字符串和子路径名字符串创建新的 File实例
public File(File parent, String child)
// 从父抽象路径名和子路径名字符串创建新的 File实例
// 根据给定的路径 创建File对象
File file1 = new File("E:\\study\\java\\5_projects\\FileClass\\test");
System.out.println(file1.toString() + "\t " + file1.getPath());
// 传入字符串的父路径 和 字符串的子路径 创建File对象
File file2 = new File("E:\\study\\java\\5_projects\\FileClass","test");
System.out.println(file2);
File file3 = new File("E:\\study\\java\\5_projects","\\FileClass\\test");
System.out.println(file3);
// 传入File类型的父路径 和 字符串类型的子路径
File file4 = new File(file1, "1.txt");
System.out.println(file4);
注意:
- 一个File对象代表硬盘中实际存在的一个文件或者目录。
- 无论该路径下是否存在文件或者目录,都不影响File对象的创建。
public File getAbsoluteFile() // 获取绝对路径(File类型)
public String getAbsolutePath() // 获取绝对路径(字符串类型)
public String getPath() // 返回字符串类型的路径
public String getName() // 获取文件名
public long length() // 获取文件字节数, 不存在返回0
public File getParentFile() //返回File类型的父路径
public long lastModified() // 返回最后修改时间
// 获取绝对路径(字符串类型)
System.out.println("绝对路径为: " + new File("FileClas\\src").getAbsoluteFile());
System.out.println(file4.getAbsolutePath());
// 获取绝对路径(File类型)
System.out.println(file4.getAbsoluteFile());
// 获取相对路径下的File对象
File file6 = new File("FileClass" + File.separator + "test" + File.separator + "2.txt");
System.out.println(file6.getAbsolutePath());
// 获取字符串类型的路径 直接打引结果相同
// 直接打印(toString)调用了getPath方法
System.out.println(file1.getPath());
// 获取文件名
System.out.println(new File("FileClass/test/1.txt").getName());
// 获取文件字节数, 不存在返回0
long fileLength = new File("FileClass/test/1.txt").length();
System.out.println(fileLength);
// 获取父路径, 返回File对象
File parentFile = new File("FileClass/test/1.txt").getParentFile();
System.out.println(parentFile);
System.out.println(parentFile.getParentFile());
// 获取最后修改时间
long lastModifyTime = new File("FileClass/test/1.txt").lastModified();
System.out.println(lastModifyTime + "\t" + new Date(lastModifyTime));
public boolean exists()
// 判断路径是否存在, 存在返回true
public boolean isFile()
// 判断是否为文件 文件返回true, 目录返回false, 路径不存在也返回false
public boolean isDirectory()
// 判断是否为目录, 目录返回true, 文件返回false, 路径不存在也返回false
// 判断路径是否存在, 存在返回true
System.out.println(new File("FileClass/test/NewDir1").exists());
// 判断是否为文件 文件返回true, 目录返回false, 路径不存在也返回false
System.out.println(file6.isFile());
// 判断是否为目录, 目录返回true, 文件返回false, 路径不存在也返回false
System.out.println(new File("FileClass/test/NewDir1").isDirectory());
// 因此 判断某文件是文件/文件夹时 要先判断路径是否存在
if (file1.exists()) {
if(file1.isFile()) {
System.out.println("文件");
} else {
System.out.println("目录");
}
} else {
System.out.println("文件不存在");
}
public boolean createNewFile() throws IOException
// 创建文件, 成功返回true, 存在则不创建
public boolean mkdir()
// 创建单级目录, 成功返回true, 存在则不创建
public boolean mkdirs()
// 创建单/多级目录, 成功返回true, 存在则不创建
public boolean delete()
// 删除文件或空目录, 成功返回true
// 创建文件, 成功返回true, 失败返回false
System.out.println(file6.createNewFile());
// 创建目录, 成功返回true, 失败返回false
System.out.println(new File("FileClass/test/NewDir1").mkdir());
System.out.println(new File("FileClass/test/NewDir2/NewDir3/NewDir4").mkdirs());
// 删除文件 和 空目录
System.out.println(file6.delete());
System.out.println(new File("FileClass/test/NewDir1").delete());
// 创建目录
//StringBuilder sb = new StringBuilder("FileClass/test/");
//for (int i = 0; i < 200; i++) {
// sb.append(i);
// sb.append("/");
//}
//System.out.println(new File(sb.toString()).mkdirs());
//
//删除目录
//File fileForDel = new File(sb.toString());
//do {
// try {
// if (Integer.parseInt(fileForDel.getName()) < 0) {
// System.out.println("删除失败");
// return;
// }
// } catch (NumberFormatException e) {
// return;
// }
// fileForDel.delete();
// fileForDel = fileForDel.getParentFile();
//} while (true);
public String[] list()
// 返回目录下所有文件 存放在字符串数组中
public File[] listFiles()
// 返回目录下所有文件 存放在File数组中
String[] arr = new File("FileClass/test").list();
for (String s : arr) {
System.out.println(s);
}
File[] fileArr = new File("FileClass/test").listFiles();
for (File file : fileArr) {
System.out.println(file + "\t" + file.getName());
}
文件过滤器接口,此接口的实现类可以传递给方法listFiles(),实现文件的过滤功能
public boolean accept(File path):方法参数就是listFiles()方法获取到的文件或者目录的路径。如果方法返回true,表示需要此路径,否则此路径将被忽略。
File dir = new File(".\\ConcurrentProgramming\\src\\_5_ThreadPool");
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//判断如果获取到的是目录,直接放行
if(pathname.isDirectory())
return true;
//获取路径中的文件名,判断是否java结尾,是就返回true
return pathname.getName().toLowerCase().endsWith("java");
}
});
for(File file : files){
System.out.println(file);
}
指在当前方法内调用自己的这种现象。
public static void a(){
a();
}
分析:num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用。
实现代码:
public static void main(String[] args) {
//计算1~num的和,使用递归完成
int num = 5;
// 调用求和的方法
int sum = getSum(num);
// 输出结果
System.out.println(sum);
}
public static int getSum(int num) {
/*
num为1时,方法返回1,
相当于是方法的出口,num总有是1的情况
*/
if(num == 1){
return 1;
}
/*
num不为1时,方法返回 num +(num-1)的累和
递归调用getSum方法
*/
return num + getSum(num-1);
}
阶乘:所有小于及等于该数的正整数的积。
分析:n的阶乘:n! = n * (n-1) ... 3 * 2 * 1
//计算n的阶乘,使用递归完成
public static void main(String[] args) {
int n = 3;
// 调用求阶乘的方法
int value = getValue(n);
// 输出结果
System.out.println("阶乘为:"+ value);
}
public static int getValue(int n) {
// 1的阶乘为1
if (n == 1) {
return 1;
}
/*
n不为1时,方法返回 n! = n*(n-1)!
递归调用getValue方法
*/
return n * getValue(n - 1);
}
遍历目录下的所有文件和所有的子目录。
分析:目录遍历,无法判断多少级目录,所以在遍历需要进行判断,如果遍历到的还是目录,就要使用递归,遍历所有目录。
public static void main(String[] args){
// 创建File对象
show(new File("./").getAbsoluteFile());
}
public static void show(File dir) {
// 获取子文件和目录
File[] files = dir.listFiles();
// 循环打印
for (File file : files) {
//判断是文件,直接输出
if (file.isFile()) {
System.out.println(file);
} else {
// 是目录,继续遍历,形成递归
show(file);
}
}
}
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/