2017-07-19 814 views
1

我還是一個初學者在kotlin和android studio。 我可以訪問大多數的Android小部件,但我無法訪問文件,到目前爲止,我設法遇到只有以下代碼不起作用。該應用程序崩潰...如何讀取和寫入安卓在kotlin的txt文件

var recordsFile = File("/LET/Records.txt") 
recordsFile.appendText("record goes here") 

這將不勝感激,如果我也可以知道如何在特定位置創建文件。就像在根目錄或內部存儲器或內部存儲器中的文件一樣。 謝謝..

回答

1

我只是想補充TpoM6oH的回答。在使用文件時,您可能無法保證在您打算的文件操作中100%成功。因此,嘗試捕獲filenotfoundexception等異常並更好地關注程序控制流是一種更好的做法。

若要在外部存儲的文件時,您可以使用

Environment.getExternalStorageDirectory() 

得到的位置和檢查位置存在。如果沒有,創建一個,繼續創建和使用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

我認爲你必須使用.mkdirs()的調用中在「/ 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() 
 

 
      } 
 
    } 
 
}

完整代碼:https://coding180.com/kotlin-android/storing-data-in-a-text-file-in-the-internal-memory/