Android 读取手机SD卡根目录下某个txt文件的文件内容

1.先看activity_main.xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
	    android:orientation="horizontal"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content" >
	    <TextView  
		    android:textSize="18dip"
		    android:layout_width="wrap_content" 
		    android:layout_height="wrap_content" 
		    android:text="文件名: /sdcard/" />
	    <EditText 
		    android:hint="xname.txt"
		    android:id="@+id/ET_Folder" 
		    android:layout_width="180dip" 
		    android:layout_height="wrap_content" />
	</LinearLayout>
	    
    <LinearLayout
	    android:orientation="horizontal"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content" >
	   <Button 
		     android:text="打开" 
		     android:id="@+id/But_Open" 
		     android:layout_width="wrap_content"                                                        
		     android:layout_height="wrap_content" />
	   <Button 
		     android:text="清除" 
		     android:id="@+id/But_Clear" 
		     android:layout_width="wrap_content"                                                        
		     android:layout_height="wrap_content" />
	</LinearLayout>

    <ScrollView 
		android:id="@+id/ScrollView01" 
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content">
		<EditText 
			android:editable="false"
			android:id="@+id/ET_FileContent" 
			android:layout_width="fill_parent" 
			android:layout_height="wrap_content" />
   </ScrollView>
    
</LinearLayout>

2.MainActivity.java文件

/*读取手机SD卡根目录下某个txt文件的文件内容 
 * */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	private EditText et_folder;			//输入的文件夹名
	private Button bt_open;				//打开按钮
	private Button bt_clear;			//清除按钮
	private EditText et_filecontent;	//用于显示txt文件内容
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		et_folder = (EditText) findViewById(R.id.ET_Folder);
        et_filecontent = (EditText) findViewById(R.id.ET_FileContent);
        
		bt_open = (Button) findViewById(R.id.But_Open); 
		bt_open.setOnClickListener(new OnClickListener(){//打开按钮监听
			public void onClick(View arg0) {
				//若输入的文件夹名为空
				if(et_folder.getText().toString().trim().equals("")){
					Toast.makeText(getApplicationContext(), "输入为空",
							Toast.LENGTH_SHORT).show();
				}else{
					//获得SD卡根目录路径   "/sdcard"
					File sdDir = Environment.getExternalStorageDirectory();
					//根目录下某个txt文件名
					File path = new File(sdDir+File.separator
					 +et_folder.getText().toString().trim());
					
					// 判断SD卡是否存在,并且是否具有读写权限
					if (Environment.getExternalStorageState()
						.equals(Environment.MEDIA_MOUNTED)) {  
			            et_filecontent.setText("");
			            
			            et_filecontent.setText(getFileContent(path));
					}
				}
			}
		});
		
		bt_clear = (Button) findViewById(R.id.But_Clear); 
		bt_clear.setOnClickListener(new OnClickListener(){//清除按钮监听
			public void onClick(View arg0) {
				et_folder.setText("");
	            et_filecontent.setText("");				
			}
		});
		
	}
	
	//读取指定目录下的所有TXT文件的文件内容
	protected String getFileContent(File file) {
		String content  = "";
		if (file.isDirectory() ) {	//检查此路径名的文件是否是一个目录(文件夹)
            Log.i("zeng", "The File doesn't not exist "
            	+file.getName().toString()+file.getPath().toString());   
        } else {
            if (file.getName().endsWith(".txt")) {//文件格式为txt文件
            	try {
                    InputStream instream = new FileInputStream(file); 
                    if (instream != null) {
                        InputStreamReader inputreader
                        	=new InputStreamReader(instream, "GBK");
                        BufferedReader buffreader = new BufferedReader(inputreader);
                        String line="";
                        //分行读取
                       while (( line = buffreader.readLine()) != null) {
                            content += line + "\n";
                        }                
                        instream.close();		//关闭输入流
                    }
                }
                catch (java.io.FileNotFoundException e) {
                    Log.d("TestFile", "The File doesn't not exist.");
                } 
                catch (IOException e)  {
                     Log.d("TestFile", e.getMessage());
                }
            }
		}
		return content ;
	}
}



转载于:https://www.cnblogs.com/anyuan9/p/6171540.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个遍历SD卡目录下所有文件并按照类型分类的示例代码: ```java import android.os.Environment; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class FileScanner { private static final String[] DOCUMENT_EXTENSIONS = {".pdf", ".doc", ".docx", ".xls", ".xlsx"}; private static final String[] IMAGE_EXTENSIONS = {".jpg", ".jpeg", ".png", ".gif"}; public static Map<String, List<File>> scanFiles() { Map<String, List<File>> result = new HashMap<>(); File rootDir = Environment.getExternalStorageDirectory(); if (rootDir.exists()) { traverseDir(rootDir, result); } return result; } private static void traverseDir(File dir, Map<String, List<File>> result) { File[] files = dir.listFiles(); if (files == null) { return; } for (File file : files) { if (file.isDirectory()) { traverseDir(file, result); } else { String fileName = file.getName().toLowerCase(); if (isImageFile(fileName)) { addFileToMap(result, "Images", file); categorizeImage(result, file); } else if (isDocumentFile(fileName)) { addFileToMap(result, "Documents", file); categorizeDocument(result, file); } } } } private static void addFileToMap(Map<String, List<File>> map, String key, File file) { List<File> fileList = map.get(key); if (fileList == null) { fileList = new ArrayList<>(); map.put(key, fileList); } fileList.add(file); } private static boolean isImageFile(String fileName) { for (String extension : IMAGE_EXTENSIONS) { if (fileName.endsWith(extension)) { return true; } } return false; } private static boolean isDocumentFile(String fileName) { for (String extension : DOCUMENT_EXTENSIONS) { if (fileName.endsWith(extension)) { return true; } } return false; } private static void categorizeImage(Map<String, List<File>> result, File file) { String fileName = file.getName().toLowerCase(); if (fileName.contains("dcim")) { addFileToMap(result, "DCIM", file); } else if (fileName.contains("whatsapp")) { addFileToMap(result, "WhatsApp", file); } else if (fileName.contains("facebook")) { addFileToMap(result, "Facebook", file); } else { addFileToMap(result, "Other Images", file); } } private static void categorizeDocument(Map<String, List<File>> result, File file) { String fileName = file.getName().toLowerCase(); if (fileName.endsWith(".pdf")) { addFileToMap(result, "PDF", file); } else if (fileName.endsWith(".doc") || fileName.endsWith(".docx")) { addFileToMap(result, "Word", file); } else if (fileName.endsWith(".xls") || fileName.endsWith(".xlsx")) { addFileToMap(result, "Excel", file); } else { addFileToMap(result, "Other Documents", file); } } } ``` 该代码会在SD卡根目录下遍历所有文件,根据文件名后缀来判断其类型,然后按照图片和文档分类。对于图片,会将其进一步分类为应用和相册;对于文档,会将其进一步分类为PDF、Word、Excel等。所有文件都会被归类到“Images”或“Documents”中。最终返回的结果是一个Map,其中键为分类名称,值为该分类下的所有文件列表。 ### 回答2: 下面是一段用JavaAndroid中的代码,用于遍历SD卡目录下的所有文件,并将其按照图片和文档进行分类。 ```java import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class FileExplorer { public static void main(String[] args) { String sdcardPath = "/sdcard"; // SD卡路径 exploreFiles(sdcardPath); } public static void exploreFiles(String path) { File directory = new File(path); File[] files = directory.listFiles(); List<File> imageFiles = new ArrayList<>(); List<File> documentFiles = new ArrayList<>(); // 遍历所有文件 for (File file : files) { if (file.isFile()) { String fileName = file.getName().toLowerCase(); // 图片分类 if (isImageFile(fileName)) { imageFiles.add(file); } // 文档分类 else if (isDocumentFile(fileName)) { documentFiles.add(file); } } else if (file.isDirectory()) { // 递归遍历子目录 exploreFiles(file.getAbsolutePath()); } } // 按照图片类型分类 Collections.sort(imageFiles); for (File imageFile : imageFiles) { // 按应用和相册分类 if (isAppImage(imageFile.getName())) { // 将图片添加到应用分类中 // ... } else if (isAlbumImage(imageFile.getName())) { // 将图片添加到相册分类中 // ... } } // 按照文档类型分类 Collections.sort(documentFiles); for (File documentFile : documentFiles) { // 按照pdf、word、exel等分类 if (isPdfFile(documentFile.getName())) { // 将文档添加到pdf分类中 // ... } else if (isWordFile(documentFile.getName())) { // 将文档添加到word分类中 // ... } else if (isExelFile(documentFile.getName())) { // 将文档添加到exel分类中 // ... } } } public static boolean isImageFile(String fileName) { // 检查文件扩展名是否为图片格式 // ... } public static boolean isDocumentFile(String fileName) { // 检查文件扩展名是否为文档格式 // ... } public static boolean isAppImage(String fileName) { // 检查图片是否属于某个应用 // ... } public static boolean isAlbumImage(String fileName) { // 检查图片是否属于手机相册 // ... } public static boolean isPdfFile(String fileName) { // 检查文件扩展名是否为pdf格式 // ... } public static boolean isWordFile(String fileName) { // 检查文件扩展名是否为word格式 // ... } public static boolean isExelFile(String fileName) { // 检查文件扩展名是否为exel格式 // ... } } ``` 上述代码中,`exploreFiles()`方法用于递归遍历SD卡目录下的所有文件,将文件按照图片和文档进行分类。图片文件根据是否属于某个应用以及手机相册进行分类,文档文件根据文件扩展名进行分类。你可以根据实际需求,补充实现缺失的文件分类逻辑。 ### 回答3: 在Android中遍历SD卡目录下的所有文件,按照图片和文档进行分类的Java代码实现如下: ```java import java.io.File; public class FileExplorer { public static void main(String[] args) { File sdCard = new File("/sdcard/"); // 获取SD卡根目录 explore(sdCard); } private static void explore(File file) { if (file.isDirectory()) { File[] files = file.listFiles(); if (files != null) { for (File childFile : files) { explore(childFile); } } } else if (file.isFile()) { String fileName = file.getName(); if (isImageFile(fileName)) { // 图片文件 classifyImageFile(file); } else if (isDocumentFile(fileName)) { // 文档文件 classifyDocumentFile(file); } } } private static boolean isImageFile(String fileName) { // 判断文件是否为图片文件,此处可以根据实际需求进行修改 String[] imageExtensions = {".jpg", ".jpeg", ".png", ".gif"}; for (String extension : imageExtensions) { if (fileName.toLowerCase().endsWith(extension)) { return true; } } return false; } private static boolean isDocumentFile(String fileName) { // 判断文件是否为文档文件,此处可以根据实际需求进行修改 String[] documentExtensions = {".pdf", ".doc", ".docx", ".xls", ".xlsx"}; for (String extension : documentExtensions) { if (fileName.toLowerCase().endsWith(extension)) { return true; } } return false; } private static void classifyImageFile(File file) { // 根据图片文件所属的应用和手机相册进行分类,可根据实际需求进行修改 String appName = getApplicationName(file); String albumName = getAlbumName(file); // 进行分类处理... System.out.println("Image File: " + file.getPath() + " [App: " + appName + "] [Album: " + albumName + "]"); } private static void classifyDocumentFile(File file) { // 根据文档文件的类型进行分类,可根据实际需求进行修改 String documentType = getDocumentType(file); // 进行分类处理... System.out.println("Document File: " + file.getPath() + " [Type: " + documentType + "]"); } private static String getApplicationName(File file) { // 获取图片文件所属的应用名称,可根据实际需求进行修改 // 此处只是示例,通过文件的路径解析获取应用名称 String filePath = file.getPath(); String[] parts = filePath.split(File.separator); if (parts.length >= 3) { return parts[2]; } return "Unknown"; } private static String getAlbumName(File file) { // 获取图片文件所属的相册名称,可根据实际需求进行修改 // 此处只是示例,通过文件的路径解析获取相册名称 String filePath = file.getPath(); String[] parts = filePath.split(File.separator); if (parts.length >= 4) { return parts[3]; } return "Unknown"; } private static String getDocumentType(File file) { // 获取文档文件的类型,可根据实际需求进行修改 // 此处只是示例,通过文件的后缀名获取文档的类型 String fileName = file.getName(); String[] parts = fileName.split("\\."); if (parts.length >= 2) { return parts[1]; } return "Unknown"; } } ``` 以上代码实现了通过递归遍历SD卡目录下的所有文件,并通过文件后缀名判断文件的类型,然后根据文件类型进行图片和文档的分类处理,可以根据实际需求进行修改扩展。对于图片文件,代码还实现了根据图片所属的应用和相册进行进一步分类处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值