java.io.File中允许的文件分隔符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.io.File中允许的文件分隔符相关的知识,希望对你有一定的参考价值。
在学习文件分隔符时发现了一个令人困惑的问题
假设文件c:ookjava
存在。以下哪行代码创建了一个表示文件的对象? (选择所有适用的选项。)
1. new File("c:ookjava");
2. new File("c:\book\java");
3. new File("c:/book/java");
4. new File("c://book//java");
5. None of the above
这本书(假设一个基于dos的文件系统)说
- &3。是正确的答案
- 是正确的,因为Java需要使用另一个反斜杠转义反斜杠。
- 也是正确的,因为Java在处理路径时会将斜杠转换为正确的斜杠。
- 通过这种逻辑,4也可以是正确的吗?
- 当我改为mac / linux文件系统时 - 应该是什么答案? (更新:我们只创建一个文件对象 - 这是否有意义不是问题 - 问题是这些中的哪一个最终会返回上面显示的路径)
通过这种逻辑,4也可以是正确的吗?
鉴于问题是
假设文件
c:ookjava
存在。以下哪行代码创建了一个表示文件的对象? (选择所有适用的选项。)
- 新文件(“c: book java”);
- 新文件(“c: book java”);
- 新文件(“c:/ book / java”);
- 新文件(“c:// book // java”);
- 以上都不是
2和3显然是正确的。那么,4“中的File
对象是否创建了代表文件的ojbect”?
是的,它确实。
假设存在C:ookjava
,这段代码
public static void main( String[] args ) throws IOException
{
File f = new File( args[ 0 ] );
System.err.printf( "args[0]: %s
", args[ 0 ] );
System.err.printf( "Path: %s
", f.getCanonicalPath() );
}
产生这个输出:
args[0]: C://book//java
Path: C:ookjava
所以new File( "C://book//java" )
绝对“创建一个代表文件的对象”,也是一个正确的答案。
它没有的任何论据都是不正确的。问题是字符串是否“创建表示文件的对象”。 C://book//java
证明了这一点。
请记住,反斜杠()是Java中的一个特殊字符。如果要在String中放置单个反斜杠字符,则必须将其写为:
"\"
以上是长度为1的字符串。
每个操作系统都有一个字符,用作路径组件之间的分隔符。无论如何,您必须在路径组件之间指定一个字符。*
选项2和3是正确的,因为它们在路径组件之间放置一个字符。
选项4在路径组件之间放置两个字符,这是不正确的。正斜杠,/
,不是Java中的特殊字符;如果你写两次,它只是两个字符。
选择1不是合法的Java。反斜杠是一个特殊的字符;在字符串文字中,反斜杠启动escape sequence,而"j"
不是有效的转义序列之一。 "
“有效,但不会做你想要的;特别是,它会产生一个(不可见的)字符,而不是一个反斜杠后跟一个b
。
回答你的最后一个问题:在Linux或OS X中没有C:
,所以虽然"C:/book/java"
是一个语法上合法的路径,但它不会存在(除非有人决定在当前目录中创建自己的名为C:
的目录,这是不太可能的,几乎肯定不是你想要的)。
*从技术上讲,路径可以有多个连续的分隔符,但这样做毫无意义。
正斜杠不是转义字符,反斜杠是转义字符。它需要两个反斜杠来表示文件路径中的单个文件分隔符,但只有一个正斜杠表示单个文件分隔符 - 正斜杠加倍,表示一行中有两个文件分隔符。
如果你改为Mac或Linux,那么问题的前提是,有一个文件c:ookjava
,没有任何意义。
这个问题的诀窍是你必须考虑文件分隔符以及Java中的字符串如何同时被转义。
以上是关于java.io.File中允许的文件分隔符的主要内容,如果未能解决你的问题,请参考以下文章