Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) 간단한 파일 브라우저 만들기

안드로이드 개발
반응형

안드로이드(Android) 간단한 파일 브라우저 만들기

 

개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2

 

디자인이 전혀 없는 파일브라우저를 하나 만듭니다.

제일 상위 루트부터 시작해서 클릭시 세부 폴더로

들어갈수 있으며 현재 위치에서 상위 폴더로

이동이 가능합니다. 그리고 파일을 클릭했을 때

이벤트를 잡아 파일명을 담은 메시지 박스를

띄우게 됩니다.

 

 

파일 브라우저를 구현하기 위해 스마트폰에

있는 파일리스트를 가져와야 합니다.

아래 처럼 path 주소만 넣으면 전체

파일 주소를 리스트로 가져오게 됩니다.

 

File f = new File(dirPath);
File[] files = f.listFiles();

 

그리고 가져온 파일 리스트를 ArrayList<String> 객체에

담게 되는데 현재 리스트는 item 리스트에 담고

하위 폴더나 파일명은 path 리스트에 담습니다.

 

item = new ArrayList<String>();
path = new ArrayList<String>();
File f = new File(dirPath);
File[] files = f.listFiles();
if (!dirPath.equals(root)) {
	item.add(root);
	path.add(root);
	item.add("../");
	path.add(f.getParent());
}

for (int i = 0; i < files.length; i++) {
	File file = files[i];
	path.add(file.getPath());
	if (file.isDirectory())
		item.add(file.getName() + "/");
	else
		item.add(file.getName());
}

 

이렇게 만든 현재 파일리스트, item 객체를

ArrayAdapter 의 인수로 넘기고 레이아웃을

R.layout.row  로 넣게 됩니다. R.layout.row

단위 행에 해당하는 xml 레이아웃 입니다.

 

ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row, item);
setListAdapter(fileList);

 

R.layout.row 레이아웃 입니다. 단위행에

해당하는 TextView 인데 파일 주소를 나타내기

위한 행높이와 글자 크기를 셋팅했네요

 

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rowtext"
    android:layout_width="fill_parent"
    android:layout_height="33dp"
    android:textSize="23sp" />

 

이번에는 행을 선택했을 때 상위로 가던지 아니면

하위 폴더로 갈수 있도록 클릭 이벤트를

잡아 줍니다. File 객체를 통해 현재 값이

디렉토리인지, read 가 가능한지 판단해서

getDir() 함수를 실행해 파일 목록을 표현 합니다.

만약 폴더를 읽지 못한다면 읽지 못한다는

메시지 박스를 띄워 줍니다.

 

if (file.canRead())
	getDir(path.get(position));
else {
	new AlertDialog.Builder(this)
			.setIcon(R.drawable.ic_launcher)
			.setTitle("[" + file.getName() + "] folder can't be read!")
			.setPositiveButton("OK", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
				}
			}).show();
}

 

메인 activity 의 전체 레이아웃 xml 입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/path"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="No Data" />

</LinearLayout>

 

다음은 메인 activity 의 전체 소스 입니다.

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

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class SampleActivity25 extends ListActivity {
	private List<String> item = null;
	private List<String> path = null;
	private String root = "/";
	private TextView mPath;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sample_activity25);
		mPath = (TextView) findViewById(R.id.path);
		getDir(root);
	}

	private void getDir(String dirPath) {
		mPath.setText("Location: " + dirPath);
		item = new ArrayList<String>();
		path = new ArrayList<String>();
		File f = new File(dirPath);
		File[] files = f.listFiles();
		if (!dirPath.equals(root)) {
			item.add(root);
			path.add(root);
			item.add("../");
			path.add(f.getParent());
		}

		for (int i = 0; i < files.length; i++) {
			File file = files[i];
			path.add(file.getPath());
			if (file.isDirectory())
				item.add(file.getName() + "/");
			else
				item.add(file.getName());
		}
		ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row, item);
		setListAdapter(fileList);
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {

		File file = new File(path.get(position));
		if (file.isDirectory()) {
			if (file.canRead())
				getDir(path.get(position));
			else {
				new AlertDialog.Builder(this)
						.setIcon(R.drawable.ic_launcher)
						.setTitle("[" + file.getName() + "] folder can't be read!")
						.setPositiveButton("OK", new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
							}
						}).show();
			}
		} else {
			new AlertDialog.Builder(this)
					.setIcon(R.drawable.ic_launcher)
					.setTitle("[" + file.getName() + "]")
					.setPositiveButton("OK", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
						}
					}).show();
		}
	}
}

 

안드로이드(Android) 간단한 파일 브라우저 만들기

 

반응형
Posted by 녹두장군1
,