PROGRAMMING
Kotlin
- 外部(共有)ストレージの Media ファイルへのアクセス
- 外部(共有)ストレージの Document ファイルへのアクセス
- 内部(App固有)ストレージへのアクセス
javascript
- ページャーを作る(簡易版)
- ページャーを作る 4/4
(クロスブラウザ対策)
(ページャー表示用メソッド)
(ページャーの使い方) - ページャーを作る 3/4
(イベント登録) - ページャーを作る 2/4
(スタイルの設定) - ページャーを作る 1/4
(ページャー用関数を準備)
(各要素を生成) - 自作カレンダーを作る 6/6
(11.~14.各種メソッド)
(15.簡単な使い方) - 自作カレンダーを作る 5/6
(09.祝休日の判定)
(10.閏年の判定) - 自作カレンダーを作る 4/6
(08.イベントの設定) - 自作カレンダーを作る 3/6
(07.スタイルの設定) - 自作カレンダーを作る 2/6
(05.カレンダーのマスのみ作成)
(06.各マスへ年月・日付を埋め込み) - 自作カレンダーを作る 1/6
(01.カレンダーの基を準備)
(02.各月の日数や年月日の区切り文字)
(03.前月・次月指定時の処理)
(04.前月・次月部分の年月を算出) - JS-Image-Resizerを使って画像を高画質で縮小
- ファイルを作成しローカルに保存
- モーダルウィンドウをクラス化
- ストップウォッチを作る
- XMLHttpRequest Lebel2を試してみる
- jQuery:Tableで親・子・兄弟要素を取得
- 文字列をセパレータ文字で分割し配列で返す関数
- forループのカウンタを使用している関数の定義
- クロージャの使いどころ
- JSONPでクロスドメイン
- AjaxでJSON形式のデータを扱う
- jsファイルからjsファイルを呼び出す
- jQuery:モーダルウィンドウを作ってみる
PHP
Java
- IntelliJ.Gradle.JavaFX(6) プラグイン org.beryx.jlink を使ってみる
- IntelliJ.Gradle.JavaFX(5) NSISでインストーラーを作る
- IntelliJ.Gradle.JavaFX(4) exewrapで実行可能jarをexe化する
- IntelliJ.Gradle.JavaFX(3) Jlink でカスタム JRE を作る
- IntelliJ.Gradle.JavaFX(2) すべての依存対象を含んだ Fatjar を作る
- IntelliJ.Gradle.JavaFX(1) アプリケーションを作る
- javaのコンパイルと実行
- イメージを回転する
- Exif情報を簡単に取得できるライブラリ
- 高画質で画像縮小
- JDBCによるデータベース操作
jetpack compose 内部(App固有)ストレージへのアクセス
androidで、端末内にファイルを保存したり読み込んだりする方法がよく分からなかったので整理してみました。
特に、内部ストレージ、外部ストレージ、アプリ固有のストレージ、共有ストレージ、メディア用途、その他の用途、
と種類が多く分かりずらいです。
また、Api のバージョンで permission の要・不要も変わります。
何回かに分けてストレージへのアクセス方法を確認してみます。
≪開発環境≫
windows11
andriod studio koala
≪実機デバッグ≫
android13
ストレージの構成
google のサイトなど色々調べ、大まかに分けてみたのが次の表です。
区分1 | 区分2 | 区分3 | アクセス |
内部ストレージ | アプリ固有のストレージ | 自分のみOK | |
外部ストレージ | アプリ固有のストレージ Android11以降作成不可 | 自分のみOK | |
共有ストレージ | メディア用途 | 他のアプリからもOK | |
メディア以外用途 | 他のアプリからもOK |
他のアプリで作られたファイル (LINEの画像など) にアクセスする以外は、パーミッションは不要のようです。
テキストファイルへの書き込み
書き込み 方法1
val context = LocalContext.current
val text = "Hello world!\nkenichi"
Button(
onClick = {
context.openFileOutput("myFile.txt", Context.MODE_PRIVATE).use {
it.write(text.toByteArray())
}
Toast.makeText(context, "ファイルが作成されました。", Toast.LENGTH_SHORT).show()
}
) {
Text(text = "内部(App固有)書き込み 1")
}
書き込み 方法2
val context = LocalContext.current
Button(
onClick = {
val path = context.filesDir.path + File.separator + "myText.txt"
val file = File(path)
// 拡張関数では内部でuse()を用いているため、ファイルのcloseが不要
file.writeText("Test1\n") // 最初に writeText が無ければ既存のファイルに追加される
file.appendText("Test2\n")
file.appendText("Test3\n")
Toast.makeText(context, "ファイルが作成されました。", Toast.LENGTH_SHORT).show()
}
) {
Text(text = "内部(App固有)書き込み 2")
}
テキストファイルからの読み込み
読み込み 方法1
val context = LocalContext.current
Button(
onClick = {
context.openFileInput("myFile.txt").bufferedReader().useLines { lines ->
// 改行区切りで処理 空行無視
for (line in lines) {
str += line + "\n"
}
}
// 表示など処理
viewModel.fileStrInSet(str)
}
) {
Text(text = "内部(App固有)読み込み 1")
}
読み込み 方法2
val context = LocalContext.current
Button(
onClick = {
val path = context.filesDir.path + File.separator + "myText.txt"
val file = File(path)
// 拡張関数では内部でuse()を用いているため、ファイルのcloseが不要
file.forEachLine {
str += it + "\n"
}
// 表示など処理
viewModel.fileStrInSet(str)
}
) {
Text(text = "内部(App固有)読み込み 2")
}
まとめ
方法は何通りかありますが、どれを使うべきなのか爺ちゃんには良くわかりませんでした。
ただ、内部ストレージは容量も小さめで、アプリの重要なファイルなどで使用されるものではないかと考えています。