我在澄清Java.io.File周围的文档方面遇到了一些麻烦。
来自Android docs:
此类的实例可能会也可能不会表示实际的文件系统对象,例如文件或目录。如果它确实表示这样的对象,则该对象驻留在分区中。分区是文件系统的特定于操作系统的存储部分。单个存储设备(例如,物理磁盘驱动器,闪存,CD-ROM)可以包含多个分区。对象(如果有)将驻留在分区
上
据我所知,File对象很像是指向文件系统结构中某个位置的路径/指针。
关于分区的一点让我很困惑,
我打电话的时候:
File file = new File(getFilesDir(),"myFileName.txt")
是否为名为“myFileName.txt”的新文件系统对象分配了新的硬盘空间块?即
Memory:
Documents
hats.png
调用构造函数后:
Memory: OR Memory Partition Land:
Documents Documents myFileName.txt
hats.png hats.png
myFileName.txt
如果不这个名为“myFileName.txt”的文件系统对象如何/何时被物理创建?
答案 0 :(得分:1)
Java文件只是对文件的引用,无论它是否存在。您显示的方法使用指定的目录生成新文件,同时自动包含正确的路径分隔符。
您可以查看file.exists()
以查看您引用的文件是否确实存在于系统中。
在您打开文件之前,文件不会被创建。
您还可以使用file.createNewFile();
,其效果与在命令行中调用touch相同。
答案 1 :(得分:0)
据我所知,File对象很像是指向文件系统结构中某个位置的路径/指针。
没有。 File
封装文件名称。而已。它不必是现有文件的名称。
我打电话的时候:
File file = new File(getFilesDir(),"myFileName.txt")
是否为一个名为“myFileName.txt”的新文件系统对象分配了一个新的硬盘空间块?
不
如果没有这个/文件系统对象名为“myFileName.txt”的方式是什么/何时被物理创建?
执行以下操作之一时:
File.createNewFile()
(除非您喜欢零长度文件,否则几乎没有必要)File
或FileOutputStream
的构造函数中使用FileWriter
,或在RandomAccessFile
参数中使用w
mode
。Path
间接使用它构建上述内容之一或FileChannel
。