1. 程式人生 > >Android用File類寫一個簡單的檔案管理軟體

Android用File類寫一個簡單的檔案管理軟體

一,概要:

Android中的File類和JAVA中File類是一樣的,方法也可以去看看java的API(點選檢視)。這裡補充幾點:

 File file=this.getFilesDir();
        //當前應用資料預設的資料儲存路勁:/data/user/0/com.maeeage.administrator.androidlearn/files
        i("getFilesDir--->",file.getAbsolutePath());

        File file1=this.getCacheDir();
        //當前應用資料預設的資料快取儲存路勁:/data/user/0/com.maeeage.administrator.androidlearn/cache
        // 可以把一些不是非常重要的檔案放在這裡,
        // 如果手機記憶體不足,系統會自動刪除App的Cache目錄下的資料
        i("getCacheDir--->",file1.getAbsolutePath());

        File file2=this.getDir("file2",MODE_PRIVATE);
        //自定義目錄:/data/user/0/com.maeeage.administrator.androidlearn/app_file2
        i("getDir()--->",file2.getAbsolutePath());

        //
        File file3=this.getExternalCacheDir();
        //得到外部的儲存位置,該位置的資料與內建的使用時一樣的:
        // /storage/emulated/0/Android/data/com.maeeage.administrator.androidlearn/cache
        i("getExternalCacheDir--->",file3.getAbsolutePath());
        File file4=this.getExternalFilesDir("file4");
        //在外部自定義的:storage/emulated/0/Android/data/com.maeeage.administrator.androidlearn/files/file4
        i("getExternalFilesDir--->",file4.getAbsolutePath());
        
        //如果開發者按照上述儲存資料,在App寫在後,資料也會跟著清除。

以上程式碼執行結果:


二,小demo

     1,先看效果:


2,檢視層:

file_manager.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/file_title"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:text="檔案管理"
           android:gravity="center"
           />
    </LinearLayout>
    <ListView
        android:id="@+id/file_listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ListView>

</LinearLayout>
item_file.xml:(ImageView的背景是用來區分是檔案還是目錄的)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/file_image"
        android:background="@drawable/isdictionary"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_margin="5dp"
        />
<TextView
    android:id="@+id/filename"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:gravity="center"
    android:layout_weight="10.5"/>
    <TextView
        android:id="@+id/isDictionary"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:gravity="center_horizontal"
     />
</LinearLayout>

3,邏輯層:

package com.maeeage.administrator.androidlearn.filemanager;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.maeeage.administrator.androidlearn.R;
import com.maeeage.administrator.androidlearn.adapter.FileAdapter;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2018/2/5/005.
 */

public class FileManager extends Activity {

    ListView listView;
    TextView title;
    String dir;
    //用存放路勁
    FileAdapter adapter;
    //介面卡
    List<File> dateList;
    //File 資料
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.file_manager);

        findVById();
        init();
        //初始化
    }
    private void findVById() {
        listView=(ListView)findViewById(R.id.file_listview);
        title=(TextView)findViewById(R.id.file_title);
    }
    //初始化
    private void init() {

        Intent intent=getIntent();
        //獲取Intent的,接收activity傳來的值,

        dir= intent.getStringExtra("dir");
        //如果為null,dir的值為 :Environment.getExternalStorageDirectory().getAbsolutePath();
        //這個路勁就是一般開啟手機檔案管理檔案目錄的路勁
        if (dir!=null)
            ;
        else
            dir= Environment.getExternalStorageDirectory().getAbsolutePath();

        //獲取title:讓其顯示檔案路勁:如Android>data>com......
        if(intent.getStringExtra("title")!=null)
            title.setText(intent.getStringExtra("title"));
        else
            title.setText("檔案管理");

        //為listView註冊上下文選單,當長按某一個檔案出現選單:
       this.registerForContextMenu(listView);

        dateList=new ArrayList<>();
        adapter=new FileAdapter(this,getDate());
        listView.setAdapter(adapter);

        //listView 點選事件,當點選的檔案為目錄時,
        // 把dir的值賦值為:dir+點選的目錄,再次跳到此頁,既可以達到迴圈,不要再去新建一個activity在現實:
        // intent.putExtra("dir",dir+"/"+dateList.get(i).getName());
        //intent.putExtra("title",title.getText()+">"+dateList.get(i).getName());
        
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                if(dateList.get(i).isDirectory())
                {
                    Intent intent=new Intent(FileManager.this,FileManager.class);
                    intent.putExtra("dir",dir+"/"+dateList.get(i).getName());
                    intent.putExtra("title",title.getText()+">"+dateList.get(i).getName());
                    startActivity(intent);
                }
            }
        });
    }

   

    //為上下文選單新增選單項
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("檔案操作");
        menu.setHeaderIcon(R.drawable.ic_brightness_high_black_24dp);
        menu.add(1,1,1,"複製");
        menu.add(1,2,1,"貼上");
        menu.add(1,3,1,"剪下");
        menu.add(1,4,1,"重新命名");

    }

    //選中選單項點選事件,這裡就Toast一下,
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case 1:
                Toast.makeText(FileManager.this,"已複製",Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(FileManager.this,"已貼上",Toast.LENGTH_SHORT).show();
                break;
            case 3:
                Toast.makeText(FileManager.this,"剪下",Toast.LENGTH_SHORT).show();
                break;
            case 4:
                Toast.makeText(FileManager.this,"重新命名",Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onContextItemSelected(item);
    }

    //獲取dir下所有的檔案
    public List< File> getDate() {

        File file=new File(dir);
        if(file.exists())
        {
            File[] file1=file.listFiles();
            for (File filename :
                    file1) {
                dateList.add(filename);
            }
        }

        return dateList;
    }
}
 FileAdapter.java(介面卡):
package com.maeeage.administrator.androidlearn.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.maeeage.administrator.androidlearn.R;

import java.io.File;
import java.util.List;

/**
 * Created by Administrator on 2018/2/5/005.
 */

public class FileAdapter extends BaseAdapter {
//傳遞File資料和上下文;
    List<File> list;
    Context context;

    public FileAdapter(Context context,List<File> list) {
        this.list = list;
        this.context=context;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
         view= View.inflate(context,R.layout.item_file,null);

           File file=list.get(i);
        ImageView image_photo= (ImageView) view.findViewById(R.id.file_image);
        TextView tv_name= (TextView) view.findViewById(R.id.filename);
        TextView tv_age= (TextView) view.findViewById(R.id.isDictionary);
        
        //如果某個檔案是目錄:就在後面顯示》;否則顯示空
        if (file.isDirectory()){
            tv_age.setText("▶");
            image_photo.setImageResource(R.drawable.isdictionary);
        }
        else {
            tv_age.setText(" ");
            image_photo.setImageResource(R.drawable.notdictionary);
        }
        
        tv_name.setText(file.getName());

        return view;

    }
}

三,總結:

掌握File的對軟體開發很重要的!好好練習!




相關推薦

AndroidFile一個簡單檔案管理軟體

一,概要: Android中的File類和JAVA中File類是一樣的,方法也可以去看看java的API(點選檢視)。這裡補充幾點: File file=this.getFilesDir(); //當前應用資料預設的資料儲存路勁:/data/user/0

一個簡單的通訊錄

#include <iostream> #include <string> using namespace std; class addressbook { private:  string Name;  string Num;  string Ad

python語言一個簡單的計算器

ali pla ket 列表 調用 語言 括號 lac 跳出循環 假如我們有這樣一個式子: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )思

C語言一個簡單的三子棋,實現玩家與電腦的對戰

原始碼: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 寫一個三子棋 */ //邏輯: //1. 畫

C語言一個簡單的掃雷小遊戲

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 語言寫一個簡單的掃雷遊戲 */ // 1.寫一個遊戲選單 M

python進階-Tkinter/mysqldb一個簡單的酒店預定GUI介面

學了python的部分庫和基本語法後,結合資料庫操作,做一個簡單的使用者友好介面實現一個簡單的酒店預訂小系統。 準備姿勢 tkinter的元件轉換 tkinter按鈕元件詳解 Python連線資料庫操作 資料庫準備 在本地資料庫新建一個hotel_data的資料庫,建立四張表。

Java不使用calendar和其餘的 只調Scanner一個日曆

作業題目 java起步,小白一個,只是分享心得和加深印象 ********************************************************************************* 作業要求  構建無參的函式和有參的函式分別輸出每年的

java程式碼一個簡單的網上購物車程式

需求:1、寫一個商品類,有商品編號、商品名稱、商品分類、商品單價屬性。2、寫一個商品條目資訊類,有商品和數量兩個屬性,有商品總價格方法。 3、寫一個購物車類,有新增商品方法、檢視訂單資訊,刪除商品,修改商品,清空購物車,求購物車中所有商品總金額方法。4、寫一個測試類,測試上

Java GUI做一個簡單管理系統

java 管理系統 gui 1.先完成主頁面MainUI(代碼如下)package com.pag_1; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.

android studio一個簡單並且bug奇多的計算器

思路:先佈局,在將相應的按鍵例項化,建立監聽器,計算。可以說是非常簡單了。 貼一下程式碼: 佈局程式碼: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas

python一個簡單的爬蟲儲存在json檔案

學習python沒多久,所以只能寫一個很簡單的爬蟲啦~~ 我使用annacada 自帶的spyder來寫爬蟲的,這次我們要爬取得網站是http://www.drugbank.ca/drugs, 主要是爬取裡面每種藥物的資訊到json檔案中,包括有 DrugBank ID, 

java和物件一個簡單的回合制對戰遊戲

一、什麼是物件,什麼是類類比現實生活,任何一個具體的事物都可以稱為物件,比如某臺電腦,某本書,某個人……而類就是根據物件相似的特徵和功能進行分類,物件是具體的,類是抽象的。二、類的基本格式public class 類名 {//定義屬性訪問修飾符  資料型別  屬性名;//定義

jsp頁面與java代碼分離的方式一個簡單的二維表

color arraylist 一個 3-9 業務 動態顯示 復雜 分層架構 方式 前提:在我們做程序時追求的是高內聚,低耦合,但是如果我們把jsp頁面的的代碼和java的代碼都放在了jsp的代碼編寫中,使java和jsp高耦合這樣的話不僅使jsp代碼頁面顯得很復雜,而

集合一個簡單的隨機分組,以及集合內元素數量查詢

移除 以及 表示 元素 move spa color 查詢 println 12個人,隨機分為4組 public static void main(String[] args) { List list = new ArrayList();

python一個簡單的excel表格獲取當時的linux系統信息

psutil 生成 之前 建立 set ces ext 流量 關閉 最近在學習excel表格的制作,順便結合之前學習的內容,利用python的兩個模板,分別是獲取系統信息的psutil,和生成excel表格的xlsxwriter。利用這兩個模板將生成一個簡單的excel表格

Canvas一個簡單的遊戲--別踩白塊兒

來吧 ber -c [] for 輸入 itl event 內部   第一次寫博客也不知怎麽寫,反正就按照我自己的想法來吧!怎麽說呢?還是不要扯那些多余的話了,直接上正題吧! 第一次用canvas寫遊戲,所以挑個簡單實現點的來幹:別踩白塊兒,其他那些怎麽操作的那些就不用再扯

shell一個簡單的告警系統

shell用shell寫一個簡單的告警系統 創建目錄結構 mkdir -p /usr/local/sbin/mon/{bin,conf,shares,mail,log} mon //主目錄 bin //主程序目錄 shares //子程序目錄 mail //發郵件目錄 log //日誌目錄 程序主入

JavaScript一個簡單的計算器

res scroll ref 簡單的 精度 arguments alt inf create 本文使用js實現了一個簡單的加、減、乘、除計算器。 以下是css部分代碼: *{ padding:0; margin:0; color: #424242;

一個簡單的網站檔案管理

一時不知道從何說起了,網站檔案管理器滿天飛的,所以,純粹是閒的蛋疼,才會做這個,對於我來說,這就是打遊戲。 1.仿win7介面 2.仿win7操作 3.上傳,下載,分享檔案,這麼說起來,就像是一個個人網盤了。 製作過程有點懶得說了,目前是做到可以瀏覽檔案,切換目錄這樣 用我的Vue元件載入做的,

socket一個簡單的聊天程式

服務端程式碼: # 建立socket物件:socket.socket()——>繫結IP地址和埠:bind——>監聽:listen——># 得到請求:accept——>接收請求:recv——>傳送資訊:send——>關閉close   i