カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

SDカードにフォルダーを作成する mkDir

SDカード内にフォルダーを作成します。
再帰的に作成するにはmkDirsメソッドを使用します。
※パーミッションの記述は割愛します。

String PATH = Environment.getExternalStorageDirectory().toString() + "/DCIM/Example";

File f = new File(PATH);

if(!f.exists()) {
    try {
        f.mkdir();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
0
5,030 views

assetsフォルダーにあるテキストファイルを読み込む

assetsフォルダーに格納したテキストファイルを読み込みます。

InputStream inputStream = null;
BufferedReader reader = null;
try {
    inputStream = getResources().getAssets().open("ファイル名");
    reader = new BufferedReader(
              new InputStreamReader(inputStream));
    String line;
    StringBuilder sb = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        Log.v("reader", line);
        if(line != ""){
            sb.append(line);
        }
    }
    String str = sb.toString();
    Toast.makeText(this, str, Toast.LENGTH_LONG).show();

} catch (IOException e) {
    e.printStackTrace();
} catch (SQLException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
        reader.close();
        inputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
0
6,425 views

New I/Oの高速ファイル入出力

FileクラスにはCopyなどというメソッドがないようなので、調べていたらNew I/Oというものを発見したのでメモ。

java.nio.channels.FileChannelを使用して、簡単にコピーできます。

File inputFile  = new File("入力元ファイルのパス");
File outputFile = new File("出力先ファイルのパス");

try {
    FileChannel inputChannel  = new FileInputStream(inputFile).getChannel();
    FileChannel outputChannel = new FileOutputStream(outputFile).getChannel();

    // インプットチャネルの出力をアウトプットチャネルに接続
    inputChannel.transferTo(0, inputChannel.size(), outputChannel);

    inputChannel.close();
    outputChannel.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
0
2,386 views

ファイル入出力(SDカード)

ローカルファイルへのアクセスについては[ローカルファイルのアクセス]、[ファイル入出力 [Android]]でも紹介しています。

同様の方法でおこなうとSDカード上のファイルの読み書きはできません。
ローカルファイルを読み込み・保存する場合はopenFileOutputメソッド等を使用しますが、引数に指定するファイルパスはフルパスではなく、ファイル名のみです。
引数に「/」(パスのセパレイター)が使用できなくなっています。

[スクリーンショットの保存]でも保存方法の違いを書いていますが、改めてSDカードのファイル入出力について書いておきます。

テキストファイルの読み書きを例とします。

テキストファイルの読み込み

private void readFile(String filename) {

    FileInputStream inputStream = null;
    BufferedReader reader = null;

    try {
        inputStream = new FileInputStream(filename);
        reader = new BufferedReader(
                new InputStreamReader(inputStream));
        String line;
        while ((line = reader.readLine()) != null) {
            //Log.v(TAG, line);
            //読み込んだデータの処理を記述
        }

    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

テキストファイルの書き込み

private void writeFile(String filename, String src){
    try {
        FileOutputStream outputStream = new FileOutputStream(filename);
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(outputStream));
        writer.write(src);
        //writer.flush(); //flushでも書き込んでくれるよう
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
0
2,229 views

FileSystemObjectを利用してファイルをコピー

Scripting.FileSystemObjectを利用してファイルをコピーする方法

Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")

'ファイルをコピー
fso.CopyFile [コピー元ファイル], _
    [コピー先ファイル], _
    [上書きフラグ(Trueで上書き:省略可)]

'フォルダーをコピー
fso.CopyFolder [コピー元フォルダー], _
    [コピー先フォルダー], _
    [上書きフラグ(Trueで上書き:省略可)]

Set fso = Nothing
0
2,452 views

ACCESSからExcelファイルが開いているか調べる

Dim xlApp   As Object
Dim xlBook  As Object

Dim FileName   As String

FileName = Environ("USERPROFILE") & "\デスクトップ\sample.xls"

Set xlApp   = CreateObject("Excel.Application")
Set xlBook  = xlApp.Workbooks.Open(FileName)

If xlBook.ReadOnly Then
    MsgBox "開いています。"
Else
    MsgBox "開いていません。"
End If

xlBook.Close

xlApp.Application.Quit

Set xlBook = Nothing
Set xlApp = Nothing
0
23,110 views

SDカード内画像の削除

SDカードに画像を保存する際、同じ名前で上書き保存すると、画像自身は上書きされますが、
元画像のサムネイルだけが残ってしまいます。
実際は、サムネイルとデータベースにもデータが残っているのではないでしょうか。
そのため、上書き保存したい場合は、データベースから削除する必要があります。

String PATH = Environment.getExternalStorageDirectory().toString();
Uri IMAGE_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
File file = new File(PATH, filename);

if(file.exists()) {
    String[] proj = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj, MediaStore.Images.Media.DATA + " = ?", new String[] { PATH + "/" + filename }, null);
    if(cursor.getCount() != 0) {
        cursor.moveToFirst();
        Uri deleteUri = ContentUris.appendId(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon(),
            cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))).build();
        getContentResolver().delete(deleteUri, null, null);
    }
    file.delete();
}
0
5,904 views

コンテンツプロバイダ

メディア関係のURIのリストです。

MediaStore.Images.Media.INTERNAL_CONTENT_URI     //内部メディアの画像
MediaStore.Images.Media.EXTERNAL_CONTENT_URI     //外部メディアの画像

MediaStore.Video.Media.INTERNAL_CONTENT_URI      //内部メディアの動画
MediaStore.Video.Media.EXTERNAL_CONTENT_URI      //外部メディアの動画

MediaStore.Audio.Media.INTERNAL_CONTENT_URI      //内部メディアの音楽
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI      //外部メディアの音楽
MediaStore.Audio.Albums.INTERNAL_CONTENT_URI     //内部メディアの音楽アルバム
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI     //外部メディアの音楽アルバム

MediaStore.Video.Thumbnails.INTERNAL_CONTENT_URI //内部メディアの動画のサムネイル
MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI //外部メディアの動画のサムネイル
0
1,737 views

画像を添付してメールを送信する

SDカードの画像を添付してメーラーを起動します。
本体に保存されている画像は添付できないようです。
送信はできるが、添付されない。

private String PATH = Environment.getExternalStorageDirectory().toString();
private Uri IMAGE_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

private void sendmail() {

    Intent intent = new Intent(Intent.ACTION_SEND);

    String[] strTo = { "sample@example.com" };

    intent.putExtra(Intent.EXTRA_EMAIL, strTo);
    intent.putExtra(Intent.EXTRA_SUBJECT, "件名");
    intent.putExtra(Intent.EXTRA_TEXT, "本文");

    Uri attachments = Uri.parse("file://" + PATH + "/sample.jpg");
    intent.putExtra(Intent.EXTRA_STREAM, attachments);
    intent.setType("image/jpeg");

    startActivity(Intent.createChooser(intent, "Choose Email Client"));
}

以下のパーミッション許可が必要
続きを読む…»

0
4,070 views

スクリーンショットの保存

Androidでは、画面のキャプチャはできないようですが、ImageViewのキャプチャならキャッシュを利用してできるようです。
ローカルにPNG形式で保存するサンプルです。

private boolean ScreenShot(ImageView imgView, String filename) {
    try {
        FileOutputStream out = openFileOutput(filename, MODE_PRIVATE);

        imgView.setDrawingCacheEnabled(false); //タイミングを確実にするために一旦falseに
        imgView.setDrawingCacheEnabled(true);

        Bitmap bmp = Bitmap.createBitmap(imgView.getDrawingCache());
        bmp.compress(CompressFormat.PNG, 100, out);

        out.close();

        return true;

    } catch (FileNotFoundException e) {
        e.printStackTrace();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

SDカードに保存する場合
続きを読む…»

0
8,662 views