在Android编程中,操作文件是基本的必备技能,现在做一个操作文件的小工具:DocumentTool.java

代码如下:

 package com.hs.example.exampleapplication.ToolUtil;

 import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.text.TextUtils;
import android.util.Log; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile; /**
* Created by 98426 on 2019/4/17.
*/ public class DocumentTool { /**
* 【动态申请SD卡读写的权限】
* Android6.0之后系统对权限的管理更加严格了,不但要在AndroidManifest中添加,还要在应用运行的时候动态申请
* **/
private static final int REQUEST_EXTERNAL_STORAGE = ;
private static String[] PERMISSON_STORAGE = {"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"};
public static void verifyStoragePermissions(Activity activity){
try {
int permission = ActivityCompat.checkSelfPermission(activity,"android.permission.WRITE_EXTERNAL_STORAGE");
if(permission!= PackageManager.PERMISSION_GRANTED){/**【判断是否已经授予权限】**/
ActivityCompat.requestPermissions(activity,PERMISSON_STORAGE,REQUEST_EXTERNAL_STORAGE);
}
}catch (Exception e){
e.printStackTrace();
}
} /**【检查文件目录是否存在,不存在就创建新的目录】**/
public static void checkFilePath(File file ,boolean isDir){
if(file!=null){
if(!isDir){ //如果是文件就返回父目录
file = file.getParentFile();
}
if(file!=null && !file.exists()){
file.mkdirs();
}
}
} /**【创建一个新的文件夹】**/
public static void addFolder(String folderName){
try {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCard = Environment.getExternalStorageDirectory();
File newFolder = new File(sdCard + File.separator + folderName);
if(!newFolder.exists()){
boolean isSuccess = newFolder.mkdirs();
Log.i("TAG:","文件夹创建状态--->" + isSuccess);
}
Log.i("TAG:","文件夹所在目录:" + newFolder.toString());
}
}catch (Exception e){
e.printStackTrace();
}
} /**【创建文件】**/
public static void addFile(String fileName){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
try {
File sdCard = Environment.getExternalStorageDirectory();
File newFile = new File(sdCard.getCanonicalPath()+File.separator+"testFolder/"+fileName);
if(!newFile.exists()){
boolean isSuccess = newFile.createNewFile();
Log.i("TAG:","文件创建状态--->"+isSuccess);
Log.i("TAG:","文件所在路径:"+newFile.toString());
deleteFile(newFile);
}
}catch (Exception e){
e.printStackTrace();
}
}
} /**【删除文件】**/
public static void deleteFile(File file){
if(file.exists()){ //判断文件是否存在
if(file.isFile()){ //判断是否是文件
boolean isSucess = file.delete();
Log.i("TAG:","文件删除状态--->" + isSucess);
}else if(file.isDirectory()){ //判断是否是文件夹
File files[] = file.listFiles(); //声明目录下所有文件
for (int i=;i<files.length;i++){ //遍历目录下所有文件
deleteFile(files[i]); //把每个文件迭代删除
}
boolean isSucess = file.delete();
Log.i("TAG:","文件夹删除状态--->" + isSucess);
}
}
} /**【重写数据到文件】**/
public static void writeData(String path , String fileData){
try {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(path);
FileOutputStream out = new FileOutputStream(file,false);
out.write(fileData.getBytes("UTF-8")); //将数据写入到文件中
Log.i("TAG:","将数据写入到文件中:"+fileData);
out.close();
}
}catch (Exception e){
e.printStackTrace();
}
} /**【续写数据到文件】**/
public static void writtenFileData(String path , String data){
try {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(path);
RandomAccessFile raf = new RandomAccessFile(file,"rw"); //按读写方式
raf.seek(file.length()); //将文件指针移到文件尾
raf.write(data.getBytes("UTF-8")); //将数据写入到文件中
Log.i("TAG:","要续写进去的数据:" + data);
raf.close();
}
}catch (Exception e){
e.printStackTrace();
}
} /**【读取文件内容】**/
public static String readFileContent(String path){
try {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file = new File(path);
byte [] buffer = new byte[*];
FileInputStream fis = new FileInputStream(file);
int len = ;
StringBuffer sb = new StringBuffer("");
while((len=fis.read(buffer))>){
sb.append(new String(buffer,,len));
}
fis.close();
return sb.toString();
}
}catch (Exception e){
e.printStackTrace();
}
return null;
} /**【判断文件是否存在】**/
public static boolean isFileExists(String fileName){
File file = new File(fileName);
return file.exists();
} /**【判断文件夹是否存在】**/
public static boolean isFolderExists(String directoryPath){
if(TextUtils.isEmpty(directoryPath)){
return false;
}
File dire = new File(directoryPath);
return (dire.exists() && dire.isDirectory()); //如果是文件夹并且文件夹存在则返回true
} /**【获取文件夹名称】**/
public static String getFolderName(String folderName){
if(TextUtils.isEmpty(folderName)){
return folderName;
}
int filePosi = folderName.lastIndexOf(File.separator);
return (filePosi == - ) ? "" : folderName.substring( , filePosi);
} /**【重命名文件】**/
public static boolean renameFile(String oldFileName , String newFileName){
File oldName = new File(oldFileName);
File newName = new File(newFileName);
return oldName.renameTo(newName);
} /**【判断文件夹里是否有文件】**/
public static boolean hasFileExists(String folderPath){
File file = new File(folderPath);
if(file.exists()){
File [] files = file.listFiles();
if(files.length>){
return true;
}
}
return false;
} /**【复制文件】参数为:String **/
public static int copyFile(String fromFile , String toFile){
try {
InputStream fosfrom = new FileInputStream(fromFile);
OutputStream outto = new FileOutputStream(toFile);
byte[] bt = new byte[];
int len = fosfrom.read(bt);
if(len > ){
outto.write(bt,,len);
}
fosfrom.close();
outto.close();
return ;
}catch (Exception e){
e.printStackTrace();
return -;
}
}
/**【复制文件】参数为:File **/
public static int copyFile(File formFile , File toFile){
try {
InputStream forform = new FileInputStream(formFile);
OutputStream forto = new FileOutputStream(toFile);
byte [] bt = new byte[];
int len = forform.read(bt);
if(len > ){
forto.write(bt,,len);
}
forform.close();
forto.close();
return ;
}catch (Exception e){
e.printStackTrace();
return -;
}
}
/**【复制文件】使用:AssetManager **/
public static void copyFileFormAsset(Context context,String assetFile , String toFilePath){
if(!new File(toFilePath).exists()){
try {
AssetManager assetManager = context.getAssets();
InputStream is = assetManager.open(assetFile);
OutputStream os = new FileOutputStream(new File(toFilePath));
byte [] bt = new byte[];
int len = ;
while ((is.read(bt))>){ //循环从输入流读取
os.write(bt,,len); //将读取到的输入流写到输出流
}
is.close();
os.close();
}catch (Exception e){
e.printStackTrace();
}
}
} /**【复制文件夹】**/
public static int copyDir(String fromFolder , String toFolder){
File [] currentFiles;
File root = new File(fromFolder);
if(!root.exists()){ //如果文件不存在就返回出去
return -;
}
currentFiles = root.listFiles(); //存在则获取当前目录下的所有文件
File targetDir = new File(toFolder); //目标目录
if(!targetDir.exists()){ //不存在就创建新目录
targetDir.mkdirs();
}
for(int i=;i<currentFiles.length;i++){ //遍历currentFiles下的所有文件
if(currentFiles[i].isDirectory()){ //如果当前目录为子目录
copyDir(currentFiles[i].getPath() + "/" , currentFiles[i].getName()+"/"); /**进行当前函数递归操作**/
}else{ //当前为文件,则进行文件拷贝
copyFile(currentFiles[i].getPath() , toFolder + currentFiles[i].getName());
}
}
return ;
} }

接下来直接调用以上方法就可以了:

 public class MainActivity extends AppCompatActivity implements View.OnClickListener{

   Button  btn_file ;

   @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); /**【动态申请sdCard读写权限】**/
DocumentTool.verifyStoragePermissions(MainActivity.this); btn_file = this.findViewById(R.id.btn_file);
btn_file.setOnClickListener(this); }    @Override
public void onClick(View view) {
int id = view.getId();
switch (id){
case R.id.btn_file:
File_i_u_d_s();
break;
}
} /**【操作文件的方法】**/
private void File_i_u_d_s(){
DocumentTool tool = new DocumentTool(); /**【新建文件夹】**/
/* String folderName = "testFolder";
tool.addFolder(folderName);*/ /**【新建文件】**/
/*tool.addFile("testFile2");*/ /**【重写数据到文件下面】**/
/*String path ="/storage/emulated/0/testFolder/testFile";
String data ="123456789";
tool.writeData(path,data);*/ /**【续写数据到文件中】**/
/*String path ="/storage/emulated/0/testFolder/testFile";
String data ="000";
tool.writtenFileData(path,data);*/ /**【读取文件中的数据】**/
/* String path ="/storage/emulated/0/testFolder/testFile";
String data = tool.readFileContent(path);
Log.i("TAG:","文件中拿到的数据:"+data);*/ String path = Environment.getExternalStorageDirectory().toString();
Toast.makeText(this, path, Toast.LENGTH_SHORT).show(); }
}

运行结果就不发上来了,如有更好改进方法欢迎留言指正。

Android-----File(文件各种操作)的更多相关文章

  1. file文件的操作

    <?php //echo readfile('D:\\123.txt');//读取文件内容第一种方式,返回字符串,但是带有长度 echo '<br>'; //var_dump(fil ...

  2. javaSE——File文件的操作

    File文件操作: 在java中,File是文件和文件夹的总称. 在java中也是一个类,可以创建多个file对象. File类的一些API import java.io.File; public c ...

  3. java中的File文件读写操作

    之前有好几次碰到文件操作方面的问题,大都由于时间太赶而没有好好花时间去细致的研究研究.每次都是在百度或者博客或者论坛里面參照着大牛们写的步骤照搬过来,之后再次碰到又忘记了.刚好今天比較清闲.于是就在网 ...

  4. android File文件的读写操作

    本程序实现两个文本框和两个按钮,其中一个文本框和一个按钮用于读取文件内容.另一个文本框和另一个按钮用于写入. java代码: package com.example.activity; import ...

  5. ANDROID对文件的操作介绍

    1. Android遵循MVC设计思想: M(业务层):service V:视图(main.xml). C:Activity 2.使用文件如何对数据进行存储 Activity提供了openFileOu ...

  6. ANDROID对文件的操作

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...

  7. Android sdcard文件读写操作

    这次演示以,安卓原生操作系统 Nexus_6手机进行操作: AndroidManifest.xml配置相关权限: <!-- 增加权限 --> <uses-permission and ...

  8. Android File文件存储功能

    1.介绍 2.使用方法 3.文件存储位置 4.java后台代码 package com.lucky.test47file; import android.support.v7.app.AppCompa ...

  9. (七)File 文件的操作

    一.文件读写模式 1.文件的几种模式: 格式:f=open("文件名","模式",encode="utf-8") #文件的只读模式 f1=o ...

  10. FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有

    2018-11-05  19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...

随机推荐

  1. go实现tcp 服务器

    我们将使用 TCP 协议和协程范式编写一个简单的客户端-服务器应用,一个(web)服务器应用需要响应众多客户端的并发请求:Go 会为每一个客户端产生一个协程用来处理请求.我们需要使用 net 包中网络 ...

  2. 【java异常】Unexpected error occurred in scheduled task. java.lang.StackOverflowError: null

    可能是栈溢出(StackOverFlow) 背景:我用定时器new东西 原因:频率太快了好像!

  3. Anaconda3(5-1)程序编辑器 自带的spyder

    1装好后自带spyder编辑器 2 打开软件 3 每次程序需要制定anaconda3中创建的虚拟环境对应 的python版本的路径 例如在我的电脑我创建了两个环境 而我的pytorch安装在pytho ...

  4. Super Fish

        Super fish is a common fun and leisure game. It's a game that tests your intelligence and memory ...

  5. 联想笔记本上Ubuntu无线网卡问题

    可能有两个问题: 1.无无线网卡驱动 2.无线网卡驱动不能自动加载 问题1:无线网卡驱动 百度出网卡驱动iwlwifi-9000,如iwlwifi-9000-pu-b0-jf-b0-34.618819 ...

  6. luoguP2039 [AHOI2009]跳棋 巧妙的dp

    设\(f[i]\)表示在第\(i\)个格子上弄一个棋子的最小代价,前后扫两遍dp后统计答案即可. 代码 #include<bits/stdc++.h> using namespace st ...

  7. Mikrotik: Setup SSTP Server for Windows 10 Client

    原文: http://www.dr0u.com/mikrotik-setup-sstp-server-for-windows-10-client/ Basic how-to on SSTP for a ...

  8. 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?(阿里面试)

    JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆.栈.方法区等介绍的比较清楚. 上图,是一张在作者根据<Java虚拟机规范(Java SE 8)>中描述的J ...

  9. scala集合有哪些

    不可变集合图示:  

  10. Qt 实现超时锁屏

    最近使用Qt实现超时锁屏的功能(工控机触摸屏),当手长时间不触摸屏幕的时候,程序超时会显示锁屏窗口. 一.效果 主窗口超时显示锁屏窗口: 系统窗口超时显示锁屏窗口: 二.实现思路 首先开启一个线程用于 ...