在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. 第二阶段冲刺(个人)——two

    今天的计划: 测试登录功能并优化. 昨天做了什么呢?  修改登录界面. 遇到的困难:一些标签运用不好,过程进度慢,改了又改.

  2. ZJOI2019赛季回顾

    退役了. NOIP2018 day1没什么好说的. day2开考后看完题:这个T3 TM不是DDP吗? 考前刚学过这东西,还没去写过 当时不知道在想什么,胡了T1 60和T2 50分保底之后就去刚T3 ...

  3. bzoj2187 fraction&&hdu3637 Find a Fraction——类欧几里得

    bzoj2187 多组询问,每次给出 $a, b, c, d$,求满足 $\frac{a}{b}  < \frac{p}{q} < \frac{c}{d}$ 的所有二元组 $(p, q)$ ...

  4. OpenResty: PHP增加数据库插件

    首先修改下php.ini 文件  告诉php当前的扩展库路径   扩展库--就是扩展的其它功能的库 这个就是扩展库文件夹,里面有很多功能性文件 就是增加这一句  extension_dir = &qu ...

  5. ESA2GJK1DH1K微信小程序篇: 小程序连接MQTT简单的Demo

    前言 这节让大家知道小程序是怎么连接的MQTT 其实,小程序就是网页实现MQTT 使用的是下面这个包 新建一个工程 一,把包放到util里面 二,编写连接函数 三,调用连接函数 订阅主题显示接收的消息 ...

  6. 数据结构——单链表(singly linked list)

    /* singlyLinkedList.c */ /* 单链表 */ /* 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. */ #include <stdio ...

  7. [RN] React Native 实现图片预览

    [RN] React Native 实现图片预览 效果预览: 代码如下: 'use strict'; import React, {Component} from 'react'; import {I ...

  8. TensorFlow分布式训练MNIST分类器

    http://c.biancheng.net/view/2004.html 本节以分布式方式训练完整的 MNIST 分类器. 该案例受到下面博客文章的启发:http://ischlag.github. ...

  9. 转载:tensorflow保存训练后的模型

    训练完一个模型后,为了以后重复使用,通常我们需要对模型的结果进行保存.如果用Tensorflow去实现神经网络,所要保存的就是神经网络中的各项权重值.建议可以使用Saver类保存和加载模型的结果. 1 ...

  10. WGS 全基因组测序数据分析

    1. DNA测序技术 https://www.jianshu.com/p/6122cecec54a 2.FASTA和FASTQ文件格式 https://www.jianshu.com/p/50ff30 ...