createNewFile和createTempFile
File.createNewFilefile类的createnewfile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败
File.createTempFile
的用途是你想要建立一个档案暂时使用,但是你不在乎其精确的档案名,只要不覆盖到已存在的档案时。可以制定
临时文件
的文件名前缀、后缀及文件所在的目录,如果不指定目录,则存放在系统的
临时文件夹
下。
java创建目录或文件夹的方法
1、File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败
2、File类的mkdir方法根据抽象路径创建目录
3、File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录
4、File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前缀、后缀及文件所在的目录,如果不指定目录,则存放在系统的临时文件夹下。
5、除mkdirs方法外,以上方法在创建文件和目录时,必须保证目标文件不存在,而且父目录存在,否则会创建失败
示例代码如下:
package book.io;
import java.io.File;
import java.io.IOException;
public class CreateFileUtil {
public static boolean createFile(String destFileName) {
File file = new File(destFileName);
if(file.exists()) {
System.out.println(“创建单个文件“ + destFileName + “失败,目标文件已存在!“);
return false;
}
if (destFileName.endsWith(File.separator)) {
System.out.println(“创建单个文件“ + destFileName + “失败,目标文件不能为目录!“);
return false;
}
//判断目标文件所在的目录是否存在
if(!file.getParentFile().exists()) {
//如果目标文件所在的目录不存在,则创建父目录
System.out.println(“目标文件所在目录不存在,准备创建它!“);
if(!file.getParentFile().mkdirs()) {
System.out.println(“创建目标文件所在目录失败!“);
return false;
}
}
//创建目标文件
try {
if (file.createNewFile()) {
System.out.println(“创建单个文件“ + destFileName + “成功!“);
return true;
} else {
System.out.println(“创建单个文件“ + destFileName + “失败!“);
return false;
}
} catch (IOException e) {
e.printStackTrace();
System.out.println(“创建单个文件“ + destFileName + “失败!“ + e.getMessage());
return false;
}
}
public static boolean createDir(String destDirName) {
File dir = new File(destDirName);
if (dir.exists()) {
System.out.println(“创建目录“ + destDirName + “失败,目标目录已经存在“);
return false;
}
if (!destDirName.endsWith(File.separator)) {
destDirName = destDirName + File.separator;
}
//创建目录
if (dir.mkdirs()) {
System.out.println(“创建目录“ + destDirName + “成功!“);
return true;
} else {
System.out.println(“创建目录“ + destDirName + “失败!“);
return false;
}
}
public static String createTempFile(String prefix, String suffix, String dirName) {
File tempFile = null;
if (dirName == null) {
try{
//在默认文件夹下创建临时文件
tempFile = File.createTempFile(prefix, suffix);
//返回临时文件的路径
return tempFile.getCanonicalPath();
} catch (IOException e) {
e.printStackTrace();
System.out.println(“创建临时文件失败!“ + e.getMessage());
return null;
}
} else {
File dir = new File(dirName);
//如果临时文件所在目录不存在,首先创建
if (!dir.exists()) {
if (!CreateFileUtil.createDir(dirName)) {
System.out.println(“创建临时文件失败,不能创建临时文件所在的目录!“);
return null;
}
}
try {
//在指定目录下创建临时文件
tempFile = File.createTempFile(prefix, suffix, dir);
return tempFile.getCanonicalPath();
} catch (IOException e) {
e.printStackTrace();
System.out.println(“创建临时文件失败!“ + e.getMessage());
return null;
}
}
}
public static void main(String args) {
//创建目录
String dirName = “D:/work/temp/temp0/temp1“;
CreateFileUtil.createDir(dirName);
//创建文件
String fileName = dirName + “/temp2/tempFile.txt“;
CreateFileUtil.createFile(fileName);
//创建临时文件
String prefix = “temp“;
String suffix = “.txt“;
for (int i = 0; i 《 10; i++) {
System.out.println(“创建了临时文件:“
+ CreateFileUtil.createTempFile(prefix, suffix, dirName));
}
//在默认目录下创建临时文件
for (int i = 0; i 《 10; i++) {
System.out.println(“在默认目录下创建了临时文件:“
+ CreateFileUtil.createTempFile(prefix, suffix, null));
}
}
}
输出结果:
创建目录D:/work/temp/temp0/temp1成功!
目标文件所在目录不存在,准备创建它!
创建单个文件D:/work/temp/temp0/temp1/temp2/tempFile.txt成功!
创建了临时文件:D:work emp emp0 emp1 emp5171.txt
创建了临时文件:D:work emp emp0 emp1 emp5172.txt
创建了临时文件:D:work emp emp0 emp1 emp5173.txt
创建了临时文件:D:work emp emp0 emp1 emp5174.txt
创建了临时文件:D:work emp emp0 emp1 emp5175.txt
创建了临时文件:D:work emp emp0 emp1 emp5176.txt
创建了临时文件:D:work emp emp0 emp1 emp5177.txt
创建了临时文件:D:work emp emp0 emp1 emp5178.txt
创建了临时文件:D:work emp emp0 emp1 emp5179.txt
创建了临时文件:D:work emp emp0 emp1 emp5180.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5181.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5182.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5183.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5184.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5185.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5186.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5187.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5188.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5189.txt
在默认目录下创建了临时文件:C:Documents and SettingsAdministratorLocal SettingsTemp emp5190.txt
JAVA里Flie类的creatnewfile与creattempfile有什么不同
后者的文件建立在默认的临时文件目录中 不在当前目录
createNewFile
public boolean createNewFile()
throws IOException当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。检查文件是否存在,若不存在则创建该文件,这是单个操作,对于其他所有可能影响该文件的文件系统活动来说,该操作是不可分的。
createTempFile
public static File createTempFile(String prefix,
String suffix)
throws IOException在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。调用此方法等同于调用 createTempFile(prefix, suffix, null)。
参数:
prefix – 用于生成文件名的前缀字符串;必须至少是三字符长
suffix – 用于生成文件名的后缀字符串;可以为 null,在这种情况下,将使用后缀 “.tmp“
返回:
表示新建空文件的抽象路径名
奇怪:我用java创建的临时文件,指定的文件名后面会出现一串数字
本来就是这样的啊。
File createTempFile(String prefix, String suffix, File directory)
其中prefix是前缀,suffix是后缀。生成的文件名是由一串随机数字加上前缀后缀形成的
java中创建文件
public void createFile(){
//path表示你所创建文件的路径
String path = “d:/tr/rt“;
File f = new File(path);
if(!f.exists()){
f.mkdirs();
}
// fileName表示你创建的文件名;为txt类型;
String fileName=“test.txt“;
File file = new File(f,fileName);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//现在你可以在d:/tr/rt 目录下找到test.txt文件
createNewFile()和createTempFile()
相同点:createNewFile()和createTempFile()都是用来创建文件。
不同点:
1.创建方式不同createNewFile()需要创建目录-file.getParentFile().mkdirs();然后再创建文件-file.createNewFile();createTempFile()调用File的静态方法-File.createTempFile(String prefix, String suffix)
2.目录不同,createNewFile()需要指定目录路径,createTempFile()的路径为App.getInstance().getApplicationContext().getCacheDir()目录下。
3.文件名称不同,createNewFile()需要指定文件名称,createTempFile()文件名称为指定前缀名+临时一串数字+指定后缀名。
createNewFile()
createTempFile()
将文件保存在设备存储上
File对象适用于从头到尾读取或写入大量数据而不会跳过。 例如,它适用于图像文件或通过网络交换的任何内容。
保存文件的位置的确切位置可能因设备而异,因此您应该使用此页面中描述的方法来访问内部和外部存储路径,而不是使用绝对文件路径。
要查看设备上的文件,您可以记录 File.getAbsolutePath() 等方法提供的文件位置,然后使用Android Studio的 Device File Explorer 浏览设备文件。
所有Android设备都有两个文件存储区:“内部”和“外部”存储。 这些名称来自Android的早期,当时大多数设备提供内置的非易失性存储器(内部存储),以及可移动存储介质,如micro SD卡(外部存储)。 现在,许多设备将永久存储空间划分为单独的“内部”和“外部”分区。 因此,即使没有可移动存储介质,这两个存储空间也始终存在,无论外部存储是否可移动,API行为都是相同的。
由于外部存储可能是可移除的,因此这两个选项之间存在一些差异,如下所示。
如果您想确保用户和其他应用程序都无法访问您的文件,则最好使用内部存储。
对于不需要访问限制的文件以及要与其他应用程序共享或允许用户使用计算机访问的文件,外部存储是最佳位置。
您的应用程序的内部存储目录由您的应用程序包名称指定在Android文件系统的特定位置,可以使用以下API访问。
将文件保存到内部存储时,可以通过调用以下两种方法之一获取相应的目录作为文件:
返回表示应用程序内部目录的文件。
返回表示应用程序临时缓存文件的内部目录的文件。 确保在不再需要时删除每个文件,并对在任何给定时间使用的内存量(例如1MB)实施合理的大小限制。
要在其中一个目录中创建新文件,可以使用 File() 构造函数,传递上述方法之一提供的文件,该方法指定您的内部存储目录。 例如:
或者,您可以调用 openFileOutput() 来获取写入内部目录中文件的FileOutputStream。 例如,以下是如何将一些文本写入文件:
请注意, openFileOutput() 方法需要文件模式参数。 传递 MODE_PRIVATE 会使其对您的应用程序保密。 自API级别17以来,其他模式选项 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 已被弃用。从Android 7.0(API级别24)开始,如果您使用Android,则会抛出 SecurityException 。 如果您的应用需要与其他应用共享私有文件,则应使用带有 FLAG_GRANT_READ_URI_PERMISSION 的 FileProvider 。
在Android 6.0(API级别23)及更低级别上,如果您将文件模式设置为全局可读,则其他应用程序可以读取您的内部文件。 但是,其他应用必须知道您的应用包名称和文件名。 除非您明确将文件设置为可读或可写,否则其他应用程序无法浏览您的内部目录并且没有读取或写入权限。 因此,只要您将MODE_PRIVATE用于内部存储上的文件,其他应用就永远无法访问它们。
如果您需要缓存某些文件,则应使用 createTempFile() 。 例如,以下方法从URL中提取文件名,并在应用程序的内部缓存目录中创建具有该名称的文件:
使用 createTempFile() 创建的文件放在应用程序专用的缓存目录中。 您应该定期删除不再需要的文件。
要读取现有文件,请调用 openFileInput(name) ,传递文件名。
您可以通过调用 fileList() 获取所有应用程序文件名的数组。
您可以使用以下方法在内部文件系统上打开目录:
返回表示文件系统上与您的应用唯一关联的目录的文件。
在应用程序的唯一文件系统目录中创建新目录(或打开现有目录)。 这个新目录出现在 getFilesDir() 提供的目录中。
返回一个文件,表示文件系统上与您的应用唯一关联的缓存目录。 此目录适用于临时文件,应定期清理。 如果磁盘空间不足,系统可能会删除那里的文件,因此请确保在读取之前检查缓存文件是否存在。
要在其中一个目录中创建新文件,可以使用 File() 构造函数,传递上述方法之一提供的File对象,该方法指定内部存储目录。 例如:
使用外部存储非常适合您要与其他应用共享或允许用户使用计算机访问的文件。
在请求存储权限并验证存储可用后,您可以保存两种不同类型的文件:
要写入公共外部存储,您必须在清单文件中请求 WRITE_EXTERNAL_STORAGE 权限:
如果您的应用只需要读取外部存储(但不能写入),那么您需要声明 READ_EXTERNAL_STORAGE 权限:
从Android 4.4(API级别19)开始,在应用程序的私有外部存储目录中读取或写入文件(使用 getExternalFilesDir() 访问)不需要 READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_STORAGE 权限。 因此,如果您的应用支持Android 4.3(API级别18)及更低版本,并且您只想访问专用外部存储目录,则应通过添加maxSdkVersion属性声明仅在较低版本的Android上请求权限:
由于外部存储可能不可用 – 例如当用户将存储装置安装到PC或已移除提供外部存储的SD卡时 – 您应始终在访问之前验证该卷是否可用。 您可以通过调用 getExternalStorageState() 来查询外部存储状态。 如果返回的状态为 MEDIA_MOUNTED ,则可以读取和写入文件。 如果是 MEDIA_MOUNTED_READ_ONLY ,则只能读取文件。
例如,以下方法可用于确定存储可用性:
如果要将公共文件保存在外部存储上,请使用 getExternalStoragePublicDirectory() 方法获取表示外部存储上相应目录的File。 该方法接受一个参数,指定要保存的文件类型,以便可以使用其他公共文件(如 DIRECTORY_MUSIC 或 DIRECTORY_PICTURES )对其进行逻辑组织。 例如:
如果要从Media Scanner中隐藏文件,请在外部文件目录中包含名为.nomedia的空文件(请注意文件名中的点前缀)。 这可以防止媒体扫描程序读取您的媒体文件,并通过MediaStore内容提供商将其提供给其他应用程序。
如果要将文件保存在应用程序专用的外部存储上且MediaStore内容提供程序无法访问,您可以通过调用 getExternalFilesDir() 并向其传递一个指示目录类型的名称来获取仅由您的应用程序使用的目录。 你想。 以这种方式创建的每个目录都会添加到父目录中,该目录封装了应用程序的所有外部存储文件,系统会在用户卸载应用程序时将其删除。
例如,这是一种可用于为单个相册创建目录的方法:
如果没有预定义的子目录名称适合您的文件,则可以调用 getExternalFilesDir() 并传递null。 这将返回外部存储上应用程序私有目录的根目录。
请记住, getExternalFilesDir() 会创建一个在用户卸载应用程序时删除的目录。 如果您保存的文件在用户卸载应用程序后仍然可用 – 例如当您的应用程序捕获照片并且用户应保留这些照片时 – 您应该将文件保存到公共目录。
无论您对共享文件使用 getExternalStoragePublicDirectory() 还是对应用程序专用的文件使用 getExternalFilesDir() ,都必须使用API常量(如 DIRECTORY_PICTURES )提供的目录名称。 这些目录名称可确保系统正确处理文件。 例如,保存在 DIRECTORY_RINGTONES 中的文件被系统媒体扫描仪分类为铃声而不是音乐。
有时,分配内部存储器分区以用作外部存储器的设备也提供SD卡插槽。 这意味着该设备有两个不同的外部存储目录,因此您需要选择在将“私有”文件写入外部存储时使用哪个目录。
从Android 4.4(API级别19)开始,您可以通过调用 getExternalFilesDirs() 来访问这两个位置,该方法返回一个文件数组,其中包含每个存储位置的条目。 阵列中的第一个条目被视为主要外部存储,您应该使用该位置,除非它已满或不可用。
如果您的应用支持Android 4.3及更低版本,则应使用支持库的静态方法 ContextCompat.getExternalFilesDirs() 。 这总是返回一个文件阵列,但如果设备运行的是Android 4.3及更低版本,那么它只包含一个主外部存储条目(如果有第二个存储位置,则无法在Android 4.3及更低版本上访问它)。
如果您提前知道要保存多少数据,则可以通过调用 getFreeSpace() 或 getTotalSpace() 来确定是否有足够的空间可用而不会导致IOException。 这些方法分别提供当前可用空间和存储卷中的总空间。 此信息对于避免将存储卷填充到某个阈值以上也很有用。
但是,系统不保证您可以写入 getFreeSpace() 指示的字节数。 如果返回的数字比您要保存的数据大小多几MB,或者文件系统小于90%已满,则可以继续。 否则,您可能不应该写入存储。
您应该始终删除应用不再需要的文件。 删除文件最直接的方法是在File对象上调用 delete() 。
如果文件保存在内部存储器上,您还可以通过调用 deleteFile() 来请求Context查找并删除文件:
如何用File.createTempFile来创建一个在指定路径下的文件
每个Activity都需要一个类来继承, Activity你可以理解成一个应用场景,如果你想像成web网页,那么它就是一个页面。 多个activity之间可以跳转,就像网页之间相互跳转一样。你只需要设置Intent,不需要GetIntent GetIntent是系统做的事情,系统
android 为什么我创建的临时文件名里有一串随机数
File.createTempFile()
这个方法内部实现的时候 就是添加了随机数。防止文件重复,创建失败。
android上如何创建临时可读写文件
不知道你指的是在代码中创建还是在命令行中创建
如果是前者并且你用的是java,那么java中的File类中有一个 createTempFile函数,就是用来创建临时文件的,创建出来的临时文件可读可写,如果想在退出时自动删除,调用一下deleteOnExit函数就行了。
如果是后者,我记得Linux中有一个命令是mktemp,可以创建一个临时文件,不知道android上面有没有,你可以试试