原文链接:https://blog.csdn.net/Activity_Time/article/details/98034409

1. URL

菜鸟教程:Java URL处理

通常推荐对http等协议进行使用,若操作(file:)部分属性将无意义,建议getFile()。




相关:URLConnections 类 可以打开连接进行IO


  • 通过getResource方法可以获得相对于classPath的文件的URL

2. File

菜鸟教程:Java File类

JAVA基础知识之IO-File类

路径测试代码:

@Test
void test7() throws IOException {
String dirname = "./file.txt";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println(dirname + " is a directory");
} else {
System.out.println(dirname + " is not a directory");
}
System.out.println("CanonicalPath:" + f1.getCanonicalPath());
System.out.println("AbsolutePath :" + f1.getAbsolutePath());
System.out.println("Path :" + f1.getPath());
}

"./file.txt" :输出结果


./file.txt is not a directory

CanonicalPath:E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest\file.txt

AbsolutePath :E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest.\file.txt

Path :.\file.txt

"/file.txt" :输出结果


/file.txt is not a directory

CanonicalPath:E:\file.txt

AbsolutePath :E:\file.txt

Path :\file.txt

"file.txt" :输出结果


file.txt is not a directory

CanonicalPath:E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest\file.txt

AbsolutePath :E:\a\MyFilesNoCh\JAVA\eclipse-jee-2018-09-win32-x86_64-Spring-Hibernate\ClassPathTest\file.txt

Path :file.txt

  • 结论
  1. CanonicalPath返回全路径,但不会包含../.等符号
  2. AbsolutePath返回全路径,会包含../.等符号
  3. 使用/开头,会从磁盘根目录开始索引
  4. 不使用/开头,会从eclipse项目根目录开始索引
  1. getPath返回的是对象创建是的路径参数

3. Path

Java7中文件IO发生了很大的变化,专门引入了很多新的类:

import java.nio.file.DirectoryStream;

import java.nio.file.FileSystem;

import java.nio.file.FileSystems;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.attribute.FileAttribute;

import java.nio.file.attribute.PosixFilePermission;

import java.nio.file.attribute.PosixFilePermissions;

其中Path在功能上可以说和原来的File相似,包含了各种路径处理操作,而新的File及其相关类Files可以说是包含了绝大多数的文件操作方法,比如创建、复制、遍历、重命名、权限、可否执行等。。。也可以直接获取流对象



[二] JavaIO之File详解 以及FileSystem WinNTFileSystem简介

java Files类和Paths类的用法 (转)

URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

  • FileSystem到底是什么?

操作系统有各自的文件系统,这些文件系统又存在很多差异,而Java 因为是跨平台的,所以它必须要统一处理这些不同平台文件系统之间的差异,才能往上提供统一的入口。

说白了又是接口来实现统一,不同的操作系统实现这个接口,就可以提供统一的表现形式

FileSystem是一个抽象类 ,

windows下的实现类为:WinNTFileSystem,在IDE中可以直接找到

可能你只是找到了一个WinNTFileSystem,只有一个要接口还有什么意思?

如果你目前只看到了一个WinNTFileSystem 那说明你在Windows下

WinNTFileSystem类 和 UnixFileSystem类并不是在同一个 JDK 里面,也就是说它们是分开的

你只能在 Windows 版本的 JDK 中找到 WinNTFileSystem,而在 Linux 版本的 JDK 中找到 UnixFileSystem

同样地,其他操作系统也有自己的文件系统实现类。


参考文章:

file的getPath getAbsolutePath和getCanonicalPath的不同

【IO流】java中文件路径(相对路径、绝对路径)相关类及方法的更多相关文章

  1. java中文件的I/O操作

    java中文件的读写操作 (一) (1)java中文件的字节转成字符读操作 FileInputStream fStream = new FileInputStream("test.txt&q ...

  2. JAVA中文件与Byte数组相互转换的方法

    JAVA中文件与Byte数组相互转换的方法,如下: public class FileUtil { //将文件转换成Byte数组 public static byte[] getBytesByFile ...

  3. java中多线程执行时,为何调用的是start()方法而不是run()方法

    Thead类中start()方法和run()方法的区别 1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状 ...

  4. JAVA 中两种判断输入的是否是数字的方法__正则化_

    JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...

  5. 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...

  6. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  7. 将java中Map对象转为有相同属性的类对象(json作为中间转换)

    java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...

  8. Java中的集合(十四) Map的实现类LinkedHashMap

    Java中的集合(十四) Map的实现类LinkedHashMap 一.LinkedHashMap的简介 LinkedHashMap是Map接口的实现类,继承了HashMap,它通过重写父类相关的方法 ...

  9. java中文件的相对路径以及jar中文件的读取

    Java中File类的构造函数需要我们传入一个pathname,当我们传入以"/"开头的pathname表示绝对路径,其他均表示相对路径. 一:绝对路径名:是完整的路径名,不需要任 ...

随机推荐

  1. Mutable and Immutable Variables in Python

    本文解决python中比较令人困惑的一个小问题:传递到函数中的参数若在函数中进行了重新赋值,对于函数外的原变量有何影响.看一个小栗子: def fun(a): a=2 return a=1 fun(a ...

  2. 基于全局地址池的DHCP

    一.实验目的 二.实验拓扑图 .三.实验编址 四.实验步骤 1.配置IP 2.配置基于全局地址池的DHCP server 使用IP pool命令创建一个新的全局地址池,名称为hjt1 配置hjt1可动 ...

  3. http常见7种请求

    抛砖引玉,聊下概念性的东西先: HTTP协议 (Hyper Text Transfer Protocol) HTTP是一个基于TCP/IP通信协议来传递数据,包括html文件.图像.结果等,即是一个客 ...

  4. Cocos2d-x之Action

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 在Cocos2d-x中的Node对象可以有动作,特效和动画等动态特性.因此在Node类中定义了这些动态特性,因此精灵,标签,菜单,地图和粒 ...

  5. subprocess 模块 与 re 模块

    sub :子 process:进程 用法: import subprocess while True: cmd_str = inport('请输入终端命令:') obj = subprocrss.Po ...

  6. SSL连接出现的问题

    客户端向服务器发送数据时,份两种情况,SSL单向验证和SSL双向验证 1.SSL单向验证时 代码如下: import java.io.IOException; import java.util.Has ...

  7. Ubuntu碎碎念

    Ubuntu-图形界面和字符界面转换.指定默认启动界面1.按ALT+CTRL+F1切换到字符界面(Linux实体机) 如果是VMware虚拟机安装的Linux系统,则切换到字符界面的时候需要以下操作 ...

  8. 华为要卖5G技术,虽然我和华为没有一点关系,但是我也很呵呵

    http://www.sohu.com/a/340555529_166680 老任头,竟然说出了这样的话,要卖5G技术给西方,然后塑造对手. 按照老任头的脾气,老任头应该不至于胡说八道这样的话,但是呢 ...

  9. 三次握手和四次挥手以及TCP标志位的详细介绍

    一.TCP标志位 在讲TCP三次握手和四次挥手之前,先说一下TCP标志位,方便后续的理解. 简单来说,TCP标志位的值代表了当前请求的目的. 标志位一共有6种,分别是: SYN(synchronous ...

  10. 【记录】logstash 命令解释

    输入./bin/logstash --help 查看对应解释如下 -f #意即文件,运行指定文件 #logstash 会自动读取 /etc/logstash.d/ 目录下所有 *.conf的文本文件, ...