创建File对象可使用new File()方法实现。具体参数如下:
方法 | 描述 |
---|---|
File(File dir, String name) | File对象类型的目录路径,name为文件名或目录名。 |
File(String path) | path为新File对象的路径。 |
File(String dirPath, String name) | dirPath为指定的文件路径,name为文件名或目录名。 |
File(URI uri) | 使用URI指定路径来创建新的File对象。 |
方法 | 描述 |
---|---|
boolean canExecute() | 判断文件或目录是否可执行。 |
boolean canRead() | 判断文件或目录是否可读。 |
boolean canWrite() | 判断文件或目录是否可写。 |
boolean equals(Object obj) | 判断obj和调用的对象是否相同。 |
boolean exists() | 判断文件或目录是否存在。 |
boolean isAbsolute() | 判断当前文件路径是否为绝对路径。 |
boolean isDirectory() | 判断File对象是否是文件夹。 |
boolean isFile() | 判断File对象是否是文件。 |
boolean isHidden() | 判断是否为操作系统定义的隐藏文件。 |
方法 | 描述 |
---|---|
File getAbsoluteFile() | 返回一个新的文件,该文件的绝对路径是调用的File的路径。 |
String getAbsolutePath() | 返回该文件的绝对路径。 |
long getFreeSpace() | 返回所在分区上剩余的字节数量,包括当前File的路径。 |
String getName() | 获得文件名或文件名。 |
String getParent() | 获得文件或文件夹的父目录名。 |
String getPath() | 获取相对路径。 |
long getTotalSpace() | 返回分区的总字节大小。 |
long getUsableSpace() | 返回分区可用字节的大小。 |
long lastModified() | 返回最后一次修改该文件的时间,以毫秒计算,从1970年1月1日开始算。 |
long length() | 返回文件的长度,单位为字节。 |
String toString() | 返回一个对象的字符串表示。 |
URI toURI() | 返回一个文件的URI。 |
方法 | 描述 |
---|---|
boolean renameTo(File newPath) | 修改文件夹名和文件名。 |
boolean setLastModified(long time) | 设置最后一次修改该文件的时间,以毫秒计算,从1970年1月1日开始算。 |
boolean setReadOnly() | 设置文件只有读权限。 |
boolean setReadable(boolean readable[, boolean ownerOnly]) | 设置文件的读状态。 |
boolean setWritable([boolean writable,] boolean ownerOnly]) | 设置文件的写状态。 |
方法 | 描述 |
---|---|
boolean createNewFile() | 创建文件或文件夹。 |
boolean delete() | 删除文件夹或文件。 |
File[] listFiles() | 列出文件夹下的所有文件和文件夹名。 |
boolean mkdir() | 创建一个文件夹。当父目录存在才能成功创建。 |
boolean mkdirs() | 创建一个文件夹。当父目录不存在时,则创建父目录。 |
Java提供了一套完整的I/O流体系,包括FileInputStream、FileOutputStream等,通过这些I/O流可以非常方便地访问磁盘上的文件内容。
Context提供了如下两个方法来打开本应用程序的数据文件的文件I/O流:
其中,openFileOutput(String name, int mode)中的mode参数表示打开文件的模式,可取的值如下:
注意,如果希望文件模式叠加,则可以使用加号连接,如 " Context.MODE_APPEND + Context.MODE_WORLD_WRITEABLE "来 表示其他应用以追加方式读写文件。
此外,Context还提供了如下几个方法来访问应用程序的数据文件夹:
方法 | 描述 |
---|---|
File getFilesDir() | 返回本应用程序的数据文件夹的绝对路径。在这里获取到的是"/data/data/ <包名> /files/"目录,返回File对象。 |
File getCacheDir() | 返回本应用程序默认的缓存文件存放路径。用于获取"/data/data/ <包名> /cache/"目录,返回File对象。 |
String[] fileList() | 返回本应用程序的数据文件夹的全部文件。 |
deleteFile(String) | 删除本应用程序的数据文件夹下的指定文件。 |
// 写入并保存文件内容 public void writeFiles(String content, String fileName) { // 初始化文件输出流 FileOutputStream fileOutputStream = null; try { // 以追加模式打开文件输出流 fileOutputStream = openFileOutput(fileName, MODE_APPEND); fileOutputStream.write(content.getBytes()); // 关闭文件输出流 fileOutputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } }
// 读取文件内容 public String readFiles(String fileName) { // 定义文件内容字符串 String content = null; // 文件输入流 FileInputStream fileInputStream = null; try { // 打开文件输入流 fileInputStream = openFileInput(fileName); // 将文件输入流存放在ByteArrayOutputStream ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // 定义每次读取一个字节 byte[] buffer = new byte[1024]; // 定义每次读取的字节长度 int len = 0; // 读取文件输入流的内容,并存入ByteArrayOutputStream中 while ((len = fileInputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } // 将文件输入流数据以字符串的形式存放 content = outputStream.toString(); // 关闭文件输入流 fileInputStream.close(); // 关闭ByteArrayOutputStream outputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 返回文件内容 return content; }
private EditText dataInput; private Button dataShowBtn; private TextView dataShowText; private String fileName = "test.txt"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dataInput = (EditText) findViewById(R.id.data_input); dataShowBtn = (Button) findViewById(R.id.data_show_btn); dataShowText = (TextView) findViewById(R.id.data_show_text); // 按钮点击,则将EditText中的内容写入文件中,并展示出来 dataShowBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 定义存放写入的文件名 // 将EditorText中的输入内容以追加模式写入文件中 writeFiles(dataInput.getText().toString(), fileName); // 输出文件内容,并展示 dataShowText.setText(readFiles(fileName)); } }); }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:showIn="@layout/activity_main" android:orientation="vertical"> <EditText android:id="@+id/data_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="4" android:text=""/> <Button android:id="@+id/data_show_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Write In And Read"/> <TextView android:id="@+id/data_show_text" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
5 . 可在DDMS中查看到新建的text文件,文件路径为:" /data/data/ <包名>
/files/test.txt "。
当程序通过Context的openFileInputStream、OpenFileOutputStream来打开文件输入流、输出流时,程序所打开的都是应用程序的数据文件夹里的文件。但这样存储的文件大小比较有限,因为手机内置的存储空间不大。而SD卡可大大地扩充收的存储能力。
为了更好地存取应用程序的大文件数据,应用程序需要读写SD卡上的文件。
读、写SD卡上的文件的步骤如下:
<!-- 在SD卡中创建与删除文件的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 向SD卡中写入数据的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
// 当手机上插入SD卡,并且应用程序具有读写SD卡的功能 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
File SDCardRoot = Environment.getExternalStorageDirectory();
使用FileInputStream、FileOutputStream、FileReader或FileWrite,来读写SD卡中的文件。这一步与在手机内存中操作文件的方法一样。