2017-07-19 82 views
1

私はまだkotlinとandroid studioの初心者です。 私はほとんどのアンドロイドウィジェットにアクセスできますが、私はファイルにアクセスすることができず、今まで私はうまく動作しない次のコードだけを見つけることができました。アプリがクラッシュする...kotlinのアンドロイドでtxtファイルを読み書きする方法

特定の場所にファイルを作成する方法もわかっていれば幸いです。ルートディレクトリや内部ストレージ、または内部ストレージのファイルに似ています。 ありがとう...

答えて

1

私はちょうどTpoM6oHの答えに追加したいです。ファイルで作業する場合、あなたが意図したファイル操作で100%成功するとは限りません。したがって、filenotfoundexceptionなどの例外を試して捕捉し、プログラム制御の流れに細心の注意を払う方が良い方法です。外部ストレージにファイルを作成するには

、あなたは

Environment.getExternalStorageDirectory() 

を使用して場所を取得し、場所が存在するかどうかを確認することができます。そうでない場合は、1を作成し、Kotlin

val sd_main = File(Environment.getExternalStorageDirectory()+"/yourlocation") 
var success = true 
if (!sd_main.exists()) { 
    success = sd_main.mkdir() 
} 
if (success) { 
    val sd = File("filename.txt") 

    if (!sd.exists()) { 
     success = sd.mkdir() 
    } 
    if (success) { 
     // directory exists or already created 
     val dest = File(sd, file_name) 
     try { 
      PrintWriter(dest).use { out -> out.println(response) } 
     } catch (e: Exception) { 
      // handle the exception 
     } 

    } else { 
     // directory creation is not successful 
    } 
} 

を使用してファイルを作成して書き込みを続行この情報がお役に立てば幸いです。

1

ファイルには、内部または外部のストレージディレクトリを使用する必要があります。

内部:

val path = context.getFilesDir() 

外部:

val path = context.getExternalFilesDir(null) 

あなたがマニフェストに権限を追加する必要があります外部ストレージを使用する場合:作成

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

あなたディレクトリ:

val letDirectory = File(path, "LET") 
letDirectory.mkdirs() 

次に、あなたのファイルを作成します。

val file = File(letDirectory, "Records.txt") 

次に、あなたがそれに書き込むことができます。

FileOutputStream(file).use { 
    it.write("record goes here".getBytes()) 
} 

か、単に

file.appendText("record goes here") 

をまた読んで:

val inputAsString = FileInputStream(file).bufferedReader().use { it.readText() } 
+0

"/ LET"がまだ存在しない場合もあります。また、書き込みのために、彼は単にファイルを使用することができます。appendText(最終的にあなたが書いたものに似ていますが、appendTextが文字セットをUTF8に設定する点が異なります) – Les

+0

context.getFilesDir()で未解決の参照 – Khayyam

+0

'android.content.Context'を使用していますか? – TpoM6oH

0

これは私のために働く私の完全なアクティビティコード..です

package com.coding180.project016 
 

 
import android.support.v7.app.AppCompatActivity 
 
import android.os.Bundle 
 
import android.widget.Button 
 
import android.widget.EditText 
 
import java.io.BufferedReader 
 
import java.io.IOException 
 
import java.io .InputStreamReader 
 
import android.widget.Toast 
 
import android.app.Activity 
 
import java.io.OutputStreamWriter 
 
class MainActivity: AppCompatActivity() { 
 
    override fun onCreate (savedInstanceState: Bundle?) { 
 
     super.onCreate (savedInstanceState) 
 
     setContentView (R.layout.activity_main) 
 
     val et1 = findViewById (R.id.et1) as EditText 
 
     if(fileList().contains("notes.txt")) { 
 
      try { 
 
       val file = InputStreamReader(openFileInput("notes.txt")) 
 
       val br = BufferedReader(file) 
 
       var line = br.readLine() 
 
       val all = StringBuilder() 
 
       while (line != null) { 
 
        all.append(line + "\n") 
 
        line = br.readLine() 
 
       } 
 
       br.close() 
 
       file.close() 
 
       et1.setText(all) 
 
      } 
 
       catch (e:IOException) { 
 
       } 
 
      } 
 

 
      val button1 = findViewById (R.id.button1) as Button 
 
     button1.setOnClickListener { 
 
       try { 
 
        val file = OutputStreamWriter(openFileOutput("notes.txt", Activity.MODE_PRIVATE)) 
 

 
        file.write (et1.text.toString()) 
 
        file.flush() 
 
        file.close() 
 
       } catch (e : IOException) { 
 
       } 
 
       Toast.makeText(this, "data were recorded", Toast.LENGTH_SHORT).show() 
 
       finish() 
 

 
      } 
 
    } 
 
}

完全なコード:私はあなたが.mkdirs()の呼び出しを使用するために持っていると思うhttps://coding180.com/kotlin-android/storing-data-in-a-text-file-in-the-internal-memory/

関連する問題