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;//导入 ...
随机推荐
- [东西]EquationCalcular
名称:EquationCalcular 版本:V1.0.0 更新日期:2015/9/27 简要介绍:本工具用于计算范围比较有限的方程及方程组,仅仅局限于n元一次方程组,欢迎需要的小学生和初中生来玩 ...
- 洛谷P1230智力大冲浪 题解
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- 一篇文章看懂mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别
看完这篇文章,你能搞清楚以下问题: 1.varchar(100)和varchar(10)的区别在哪里? 2.varchar能存多少汉字.数字? 3.varchar的最大长度是多少呢? 4.字符.字节. ...
- 异步IRP的教训(已附DUMP)
[教训]异步IRP中,IoSetCompletionRoutine()要在IoCallDriver()的前面,不然底层驱动完成了读写之后,找不到完成例程,会导致出错.看似简单,不小心却可能带来大麻烦. ...
- linux 系统时间 EST CST
早上本来要做一些实验的,基于时间的.date 查看时间,发现时间不对.用 pool.ntp.org 去同步发现时间还是一样的,并且没有报错.如是开启另外一台时间对的linux服务器进行对比.发现一个是 ...
- github执行clone操作时报错
在执行github上的clone操作时,报 ssh_exchange_identification: Connection closed by remote host 在网上找了好多种解决办法,都没有 ...
- C#】通过遍历IFrame访问页面元素
最近在做一个小项目,期间需要用到C#去操作IE页面中的元素,实现自动填写表单并且提交的功能,想这网上关于这方面的东西肯定很多,于是开始在网上找资料. 在逆心的博客上找到些东西对自己帮助很大,原文链接: ...
- NET Core3前后端分离开发框架
NET Core前后端分离快速开发框架 https://www.cnblogs.com/coldairarrow/p/11870993.html 引言 时间真快,转眼今年又要过去了.回想今年,依次开源 ...
- centos删除指定名称的进程
vim kill_process.sh ----------------------------------- if [ "$1" = "" ]; then e ...
- 彻底解决springboot修改页面和代码会自动重启
3.application.yml配置 spring.devtools.restart.enabled=falsespring.thymeleaf.cache=false 1.解决thymeleaf修 ...