Android-----File(文件各种操作)
在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(文件各种操作)的更多相关文章
- file文件的操作
<?php //echo readfile('D:\\123.txt');//读取文件内容第一种方式,返回字符串,但是带有长度 echo '<br>'; //var_dump(fil ...
- javaSE——File文件的操作
File文件操作: 在java中,File是文件和文件夹的总称. 在java中也是一个类,可以创建多个file对象. File类的一些API import java.io.File; public c ...
- java中的File文件读写操作
之前有好几次碰到文件操作方面的问题,大都由于时间太赶而没有好好花时间去细致的研究研究.每次都是在百度或者博客或者论坛里面參照着大牛们写的步骤照搬过来,之后再次碰到又忘记了.刚好今天比較清闲.于是就在网 ...
- android File文件的读写操作
本程序实现两个文本框和两个按钮,其中一个文本框和一个按钮用于读取文件内容.另一个文本框和另一个按钮用于写入. java代码: package com.example.activity; import ...
- ANDROID对文件的操作介绍
1. Android遵循MVC设计思想: M(业务层):service V:视图(main.xml). C:Activity 2.使用文件如何对数据进行存储 Activity提供了openFileOu ...
- ANDROID对文件的操作
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...
- Android sdcard文件读写操作
这次演示以,安卓原生操作系统 Nexus_6手机进行操作: AndroidManifest.xml配置相关权限: <!-- 增加权限 --> <uses-permission and ...
- Android File文件存储功能
1.介绍 2.使用方法 3.文件存储位置 4.java后台代码 package com.lucky.test47file; import android.support.v7.app.AppCompa ...
- (七)File 文件的操作
一.文件读写模式 1.文件的几种模式: 格式:f=open("文件名","模式",encode="utf-8") #文件的只读模式 f1=o ...
- FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
2018-11-05 19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...
随机推荐
- three.js 居中-组
原文:https://blog.csdn.net/qq_30100043/article/details/78921224 代码: <!DOCTYPE html> <html lan ...
- git提交代码时出现was rejected by remote错误
git常见问题 git是大家在公司基本都项目管理工具,有一次在改了一个bug提交远程提交就出现问题了. 解决方案 首先这个是远程提交的时候被项目权限拦截掉了,一般在我们都用配置ssh公钥的方式操作,那 ...
- 在非gnome系桌面环境下运行deepin-wine tim的错误解决
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/deepin_wine_run_in_not_gnome_desk ...
- ES6-Generator使用与改写
用Generator封装Symbol中的iterator方法: 注意:Generator的function后必须写* config:分别有3个txt文件,两个文件写路径,一个文件写要输出的内容 前置写 ...
- Docker ubuntn 使用apt-get update报错
在docker 容器中执行apt-get update有时候会报错,当然造成错误的原因有很多情况,具体情况具体分析, APT Hash sum mismatch错误的常见解决方法总结这篇博客写的不错, ...
- Java集合详解6:这次,从头到尾带你解读Java中的红黑树
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- tcp & 长连接 短连接
参考文档: tcp协议 http://blog.chinaunix.net/uid-26833883-id-3627644.html 长连接和短连接 http://blog.csdn.net/free ...
- 【Gamma】Scrum Meeting 7
前言 会议定点:大运村公寓 会议时间:2019/6/5 会议目的:明确下阶段目标 一.任务进度 组员 上周任务进度 下阶段任务 大娃 修复后端bug 辅助做好引导录屏 二娃 撰写会议博客 撰写会议博客 ...
- Linux内核文档翻译——kobject.txt
==================================================================== Everything you never wanted to ...
- node学习基础
node特点 js运行时,非阻塞I/O,事件循环 模块导入导出 模块化 导入 require('./xxx') module.exports=xxx index.js module.exports = ...