Android 通过文件管理器选择文件、逐行读取文件并添加指定字符串

打开文件管理器:

  • android :打开手机文件管理

  1. private static final int REQUEST_CODE = 1;
    
    private String mFileNamePath; 
    
    private String mJoinData;

     

  2.            case R.id.device_id:
                    //打开文件夹选择文件
                    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                    //设置文件选择类型,任意类型
                    intent.setType("*/*");
                    intent.addCategory(Intent.CATEGORY_OPENABLE);
                    startActivityForResult(intent, REQUEST_CODE);
                    break;
  3.   @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (resultCode == Activity.RESULT_OK) {
                Uri uri = data.getData();
                if ("file".equalsIgnoreCase(uri.getScheme())) {                                     //使用第三方应用打开
                    Toast.makeText(this, uri.getPath() + "11111", Toast.LENGTH_SHORT).show();
                    return;
                }
                //4.4以后
                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
                    mFileNamePath = getPath(this, uri);
    
                    if (mFileNamePath != null) {
                       // do something...
                        readFile(mFileNamePath);
                    } else {
                        Toast.makeText(this, "文件路径异常 222", Toast.LENGTH_SHORT).show();
                    }
    
                    Log.d(Tag, "所选择的文件路径:  " + mFileNamePath);
                } else {//4.4以下系统调用方法
                    Toast.makeText(MainActivity.this, getRealPathFromURI(uri) + "222222", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
        public String getRealPathFromURI(Uri contentUri) {
            String res = null;
            String[] proj = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
            if (null != cursor && cursor.moveToFirst()) {
                ;
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                res = cursor.getString(column_index);
                cursor.close();
            }
            return res;
        }
    
        /**
         * 4.4的从Uri获取文件绝对路径
         */
        @SuppressLint("NewApi")
        public String getPath(final Context context, final Uri uri) {
    
            final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
    
            // DocumentProvider
            if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
                // ExternalStorageProvider
                if (isExternalStorageDocument(uri)) {
                    final String docId = DocumentsContract.getDocumentId(uri);
                    final String[] split = docId.split(":");
                    final String type = split[0];
    
                    if ("primary".equalsIgnoreCase(type)) {
                        return Environment.getExternalStorageDirectory() + "/" + split[1];
                    }
                }
                // DownloadsProvider
                else if (isDownloadsDocument(uri)) {
    
                    final String id = DocumentsContract.getDocumentId(uri);
                    final Uri contentUri = ContentUris.withAppendedId(
                            Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
    
                    return getDataColumn(context, contentUri, null, null);
                }
                // MediaProvider
                else if (isMediaDocument(uri)) {
                    final String docId = DocumentsContract.getDocumentId(uri);
                    final String[] split = docId.split(":");
                    final String type = split[0];
    
                    Uri contentUri = null;
                    if ("image".equals(type)) {
                        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                    } else if ("video".equals(type)) {
                        contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                    } else if ("audio".equals(type)) {
                        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                    }
    
                    final String selection = "_id=?";
                    final String[] selectionArgs = new String[]{split[1]};
    
                    return getDataColumn(context, contentUri, selection, selectionArgs);
                }
            }
            // MediaStore (and general)
            else if ("content".equalsIgnoreCase(uri.getScheme())) {
                return getDataColumn(context, uri, null, null);
            }
            // File
            else if ("file".equalsIgnoreCase(uri.getScheme())) {
                return uri.getPath();
            }
            return null;
        }
    
        /**
         * Get the value of the data column for this Uri. This is useful for
         * MediaStore Uris, and other file-based ContentProviders.
         *
         * @param context       The context.
         * @param uri           The Uri to query.
         * @param selection     (Optional) Filter used in the query.
         * @param selectionArgs (Optional) Selection arguments used in the query.
         * @return The value of the _data column, which is typically a file path.
         */
        public String getDataColumn(Context context, Uri uri, String selection,
                                    String[] selectionArgs) {
    
            Cursor cursor = null;
            final String column = "_data";
            final String[] projection = {column};
    
            try {
                cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
                        null);
                if (cursor != null && cursor.moveToFirst()) {
                    final int column_index = cursor.getColumnIndexOrThrow(column);
                    return cursor.getString(column_index);
                }
            } finally {
                if (cursor != null)
                    cursor.close();
            }
            return null;
        }
    
        /**
         * @param uri The Uri to check.
         * @return Whether the Uri authority is ExternalStorageProvider.
         */
        public boolean isExternalStorageDocument(Uri uri) {
            return "com.android.externalstorage.documents".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return Whether the Uri authority is DownloadsProvider.
         */
        public boolean isDownloadsDocument(Uri uri) {
            return "com.android.providers.downloads.documents".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return Whether the Uri authority is MediaProvider.
         */
        public boolean isMediaDocument(Uri uri) {
            return "com.android.providers.media.documents".equals(uri.getAuthority());
        }
  4.  
  • Java :打开PC本地文件管理
	// 文件管理器
	public void ChooseFileData() {
		JFileChooser chooser = new JFileChooser();
		chooser.setMultiSelectionEnabled(false);
		FileNameExtensionFilter filter = new FileNameExtensionFilter(
				"JPG&WAV&TXT&WORD&PEM", "jpg", "wav", "txt", "word", "pem");
	//			"PEM","pem");

		chooser.setFileFilter(filter);
		chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
		chooser.setDialogTitle("请选择文件");
		int result = chooser.showOpenDialog(this);
		if (result == JFileChooser.APPROVE_OPTION) {
			File mFile = chooser.getSelectedFile();
			String mChooseFileName = mFile.getName();
			File mAbFile = chooser.getCurrentDirectory();
			String mAbfilepath = mAbFile.getAbsolutePath();

			// D:\Test\lektkey\lekt1a-private.pem
			mFileNamePath = mAbfilepath + "\\" + mChooseFileName;
			System.out.println("所选择的文件全路径。。。。。" + mFileNamePath);
			// 路径非空判断
			if (mFileNamePath != null || mFileNamePath.length() > 0) {
				
                            readFile(mFileNamePath);

			} else {
				JOptionPane.showMessageDialog(mEntryButton, "文件路径异常:", "错误",
						JOptionPane.INFORMATION_MESSAGE);
				System.out.println("文件路径异常");
			}
			System.out.println("所选择的文件路径:  " + mFileNamePath);
		}
	}
  • 将添加文成后的文件,从源文件夹下移动入其他文件夹下:
  1. 		// 当前用户桌面
    		File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory();
    		String desktopPath = desktopDir.getAbsolutePath();
    		System.out.println("桌面路径: " + desktopPath + "\n" + "创建的文件路径:"
    				+ desktopPath + "\\completed");
    		// 判断当前文件夹是否存,不存在就创建
    		File file = new File(desktopPath + "\\completed");
    		if (!file.exists()) {
    			file.mkdir();
    			System.out.println("文件夹不存在,创建成功");
    		} else {
    			System.out.println("文件夹已存在,不需要创建");
    		}
  2. // 剪切文件 选择的文件路径
    	public static void ChooseFileCut(String inputPath, String outPath) {
    
    		File inputFile = new File(inputPath);
    		File outFile = new File(outPath);
    		// 在程序结束时删除文件1
    		// inputFile.deleteOnExit();
    		try {
    			// 在D盘创建文件2
    			outFile.createNewFile();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		cutFile(inputFile, outFile);
    
    	}
  3. 	// 剪切文件 将文件1剪切入文件2中并删除源文件
    	public static  void cutFile(File inputFile, File outFile) {
    		FileOutputStream fileOutputStream = null;
    		InputStream inputStream = null;
    		byte[] bytes = new byte[1024];
    		int temp = 0;
    		try {
    			inputStream = new FileInputStream(inputFile);
    			fileOutputStream = new FileOutputStream(outFile);
    			while ((temp = inputStream.read(bytes)) != -1) {
    				fileOutputStream.write(bytes, 0, temp);
    				fileOutputStream.flush();
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (inputStream != null) {
    				try {
    					inputStream.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			if (fileOutputStream != null) {
    				try {
    					fileOutputStream.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		System.out.println("文件剪切成功。。。");
    		inputFile.delete();
    	}

 

逐行读取文件,返回集合列表:

	/**
	 * 读取文件
	 *
	 * @param
	 */
	public List<String> readFile(String strFilePath) {
		List<String> arrayList = new ArrayList<>();
		File file = new File(strFilePath);
		if (file.isDirectory()) {
			Log.d(Tag, "The File doesn't not exist.");
		} else {
			try {
				InputStream instream = new FileInputStream(file);
				if (instream != null) {
                                    //arrayList .add(line);
                                    //Log.d(Tag,"逐行数据: "+line);
					InputStreamReader inputreader = new InputStreamReader(instream);
					BufferedReader buffreader = new BufferedReader(inputreader);
					String line;
					// 逐行读取
					while ((line = buffreader.readLine()) != null) {
						StringBuilder builder = new StringBuilder(line);
                                            //每行,开头结尾添加字符串 "   ""\n"
						builder.insert(0, "\"");
						builder.insert(builder.length(), "\"\"\\n\"");
						arrayList.add(builder.toString());
					}

					mJoinData = "";
					for (int i = 0; i < arrayList.size(); i++) {

						mJoinData += arrayList.get(i) + "\n";
					}
					Log.d("逐行添加字符并拼接后的数据:" + "\n" + mJoinData);
					instream.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return arrayList;
	}

添加字符后的文件:

所选择的文件路径:  /storage/emulated/0/Video/lekt1key/lekt1t-private.pem

创建的桌面文件路径:C:\Users\test\Desktop\completed

"-----BEGIN CERTIFICATE-----""\n"
"MIIDXDCCAkSgAwIBAgIQexwtEyjkv45PwJxAb4TGYjANBgkqhkiG9w0BAQsFADAm""\n"
"MSQwIgYDVQQDDBtBenVyZSBJb1QgQ0EgTEVLVEVDIFJvb3QgQ0EwHhcNMTkwOTE4""\n"
"MDcyNjM0WhcNMjkwOTE1MDczNjM0WjATMREwDwYDVQQDDAhsZWt0ZWMxYTCCASIw""\n"
"DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9XuYHxbd6T7199BLqx5ZcONB1o""\n"
"-----END CERTIFICATE-----""\n"

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值