当前位置:   article > 正文

Android实现文件操作_android取出文件内容并修改

android取出文件内容并修改

一、文件读取

1.1 使用BufferedReader类

        (1)BufferedReader类介绍

https://blog.csdn.net/ai_bao_zi/article/details/81134801

       (2)实现文件读取

  1. //读取指定目录下所有TXT文件的文件内容
  2. private String getFileContent(File file) {
  3. String content = "";
  4. if(!file.isDirectory()) {//判断该路径名的文件是否是一个目录(文件夹)
  5. if(file.getName().endsWith("txt")) {//判断是否是文本文件
  6. try {
  7. InputStream inputStream = new FileInputStream(file);
  8. if (inputStream != null) {
  9. InputStreamReader inputReader = new InputStreamReader(inputStream, "UTF-8");
  10. BufferedReader bufferedReader = new BufferedReader(inputReader);
  11. String line = "";
  12. //分行读取
  13. while ((line = bufferedReader.readLine()) != null) {
  14. content += line + "\n";
  15. }
  16. inputStream.close();//关闭输入流
  17. }
  18. }catch (java.io.FileNotFoundException e) {
  19. Log.d("getFileContent: ", "The File doesn't exist");
  20. } catch (IOException e) {
  21. Log.d("getFileContent", e.getMessage());
  22. }
  23. }
  24. }
  25. return content;
  26. }

二、文件写入

2.1 使用RandomAccessFile

         (1)RandomAccess类介绍

https://www.cnblogs.com/lijianli/p/9680265.html

         (2)实现文件写入

  1. //将字符串写入文本文件中(makeFilePath函数及配套使用的函数见文章后面的“附录”)
  2. private void writeTxtToFile(String contentstr, String filePath, String fileName) {
  3. //生成文件夹之后,再生成文件,不然会出错
  4. makeFilePath(filePath, fileName);
  5. String filePathStr = filePath + fileName;
  6. //每次写入时,都换行写
  7. String contentStr = contentstr + "\r\n";
  8. try {
  9. File file = new File(filePathStr);
  10. if (!file.exists()) {
  11. Log.d("writeTxtToFile", "create the file; " + filePathStr);
  12. file.getParentFile().mkdirs();
  13. file.createNewFile();
  14. }
  15. RandomAccessFile raf = new RandomAccessFile(file, "rwd");
  16. raf.seek(file.length());
  17. raf.write(contentStr.getBytes());
  18. ToastUtil.showLong("写入成功!");
  19. Log.d("writeTxtToFile","写入成功");
  20. raf.close();
  21. } catch (Exception e) {
  22. Log.e("writeFIleToFile", "Error on write File: " + e);
  23. }
  24. }

三、文件修改

3.1 使用FileWriter类

        (1)FileWriter类介绍

菜鸟教程:https://www.runoob.com/java/java-filewriter.html

        (2)实现文件修改

  1. //修改数据(以读取文件的编辑框中的内容覆盖原文件内容)
  2. //makeFilePath函数及配套使用的函数见文章后面的“附录”
  3. private void modifyFile() {
  4. String contentStr = readFileEt.getText().toString();
  5. //生成文件夹之后,再生成文件,不然会出错
  6. makeFilePath(filePath, fileName);
  7. String filePathStr = filePath + fileName;
  8. try {
  9. File file = new File(filePathStr);
  10. if (!file.exists()) {
  11. Log.d("modifyFile", "create the file: " + filePathStr);
  12. file.getParentFile().mkdirs();
  13. file.createNewFile();
  14. }
  15. FileWriter fw = new FileWriter(file);
  16. fw.write(contentStr);
  17. ToastUtil.showLong("修改成功!");
  18. Log.d("modifyFile","修改成功");
  19. fw.close();
  20. } catch (Exception e) {
  21. Log.e("modifyFile", "Error on Write File: " + e);
  22. }
  23. }

四、文件复制

4.1 使用FileInputStream和FileOutputStream类

  1. //复制文件
  2. public boolean copyFile(String filePathFrom, String filePathTo) {
  3. File fileFrom = new File(filePathFrom);
  4. File fileTo = new File(filePathTo);
  5. if(!fileFrom.exists()) {
  6. fileFrom.mkdir();
  7. Log.d("FileMoveAsyncTask: ", "copyFile: " + "文件fileFrom不存在,重新创建!");
  8. }
  9. if(!fileTo.exists()) {
  10. fileTo.mkdir();
  11. Log.d("FileMOveAsyncTask: ", "copyFile: " + "文件fileTo不存在,重新创建!");
  12. }
  13. boolean isCopySuc = false;
  14. File fileFrom2 = new File(filePathFrom + "data.txt");
  15. File fileTo2 = new File(filePathTo + "data.txt");
  16. try {
  17. InputStream is = new FileInputStream(fileFrom2);
  18. FileOutputStream fos = new FileOutputStream(fileTo2);
  19. byte[] buffer = new byte[1024];
  20. int byteCount = 0;
  21. while ((byteCount = is.read(buffer)) != -1) {
  22. fos.write(buffer, 0, byteCount);
  23. }
  24. fos.flush();
  25. fos.close();
  26. is.close();
  27. isCopySuc = true;
  28. Log.d("FileMoveAsyncTask", "copyFile: " + "文件复制成功");
  29. }catch (java.io.FileNotFoundException e) {
  30. Log.d("FileMoveAsyncTask: ", fileTo2.toString());
  31. Log.d("FileMoveAsyncTask: ", "The FileTo doesn't exist");
  32. } catch (IOException e) {
  33. Log.d("FileMoveAsyncTask", "copyFile" + e.getMessage());
  34. }
  35. return isCopySuc;
  36. }

 五、附录

5.1 makeFilePath函数及配套函数

  1. //生成文件
  2. private File makeFilePath(String filePath, String fileName) {
  3. File file = null;
  4. makeRootDirectory(filePath);
  5. try {
  6. file = new File(filePath + fileName);
  7. if (!file.exists()) {
  8. file.createNewFile();
  9. }
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. }
  13. return file;
  14. }
  15. //生成文件夹
  16. private static void makeRootDirectory(String filePath) {
  17. File file = null;
  18. try {
  19. file = new File(filePath);
  20. if (!file.exists()) {
  21. Log.d("makeRootDirectory", "mkdir:" + file.toString());
  22. file.mkdir();
  23. }
  24. } catch (Exception e) {
  25. Log.i("error:", e + "");
  26. }
  27. }

六、根据图片路径获取图片

6.1 核心代码

  1. File file = new File(path);
  2. ImageView img = (ImageView) findViewById(R.id.img);
  3. if(file.exists()){
  4. Bitmap bm = BitmapFactory.decodeFile(path);
  5. img.setImageBitmap(bm);
  6. }

6.2 文件读写权限

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

6.3 可能出现的问题

        1. 在创建文件时,需要先创建目录文件夹,在创建文件,否则会报错(也就是说要把父文件夹和子文件的创建分开处理);

        2. 使用File的createNewFile()函数时,出现Operation not permitted的报错,可能的原因是:手机没插内存卡(SD卡)(前提是你是想把文件存储在sd卡上,你创建的文件目录是在/sdcard下);

——————————————————————————————————————————

参考网址

        参考:Android写入txt文件并读取 - 简书(读写文本文件)

        参考:http://www.voidcn.com/article/p-vyjddivf-ba.html (文件修改,采用文件覆盖性写入)

        参考:Android实现文件的复制_Syshacker的专栏-CSDN博客_安卓 文件复制(文件复制)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/319282
推荐阅读
相关标签
  

闽ICP备14008679号