Ficheros en Kotlin
Manejo de ficheros en Kotlin
Gestión de datos (2 – Ficheros)
I/O Streams
Lectura y Escritura de Ficheros en Java
Lectura y escritura en Kotlin
Exception Handling in Kotlin
Ejemplo: ficheros en Kotlin (en Intellij Idea)
import java.io.File
import java.io.IOException
fun main() {
val ruta = "test.txt"
val archivo = File(ruta)
val texto = "hola\nun ejemplo de fichero\nadios"
try {
println("Manejo de ficheros")
if (escribir(archivo, texto)) {
println("Fichero $ruta escrito ok")
}
println("Archivo leído:\n" + leer(archivo))
} catch (e: IOException) {
println ("Error: " + e.message.toString())
}
}
@Throws(IOException::class)
private fun escribir(fichero: File, cadena: String): Boolean {
val correcto = true
val bufferedWriter = fichero.bufferedWriter()
bufferedWriter.write(cadena)
bufferedWriter.close()
return correcto
}
@Throws(IOException::class)
private fun leer(fichero: File): String {
//val bufferedReader = fichero.bufferedReader()
//val text: List<String> = bufferedReader.readLines()
val inputString = fichero.bufferedReader ().use {
it.readText ()
}
println (inputString)
fichero.bufferedReader().close()
//return text.toString()
return inputString
}
Ejecución en consola:
Instalar Kotlin:
Kotlin command-line compiler
sudo snap install --classic kotlin nano ficheros.kt kotlinc ficheros.kt -include-runtime -d ficheros.jar java -jar ficheros.jar
Ejemplo: Permiso en memoria externa

Crear un nuevo proyecto en Kotlin: MemoriaExternaKotlin
Añadir el permiso al manifiesto:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
build.gradle
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.memoriaexternakotlin"
compileSdk = 34
buildFeatures {
viewBinding = true
}
dependencias
dependencies {
implementation("androidx.fragment:fragment-ktx:1.6.2") // or later
implementation("androidx.activity:activity-ktx:1.8.2") // or later
}
strings.xml
<resources>
<string name="app_name">Memoria Externa en Kotlin</string>
<string name="texto">una prueba de escritura en memoria externa</string>
<string name="botonEsc">Guardar</string>
<string name="botonLee">Leer</string>
<string name="propiedades">Propiedades del fichero</string>
</resources>
activity_main.xml
<?xml version = "1.0" encoding = "utf-8" ?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="353dp"
android:layout_height="96dp"
android:layout_marginLeft="20dp"
android:layout_marginEnd="28dp"
android:ems="10"
android:gravity="top|left"
android:hint="@string/texto"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.042">
</EditText>
<Button
android:id="@+id/botonEscribir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="36dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="228dp"
android:text="@string/botonEsc"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText"
app:layout_constraintVertical_bias="0.0" />
<Button
android:id="@+id/botonLeer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="49dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="44dp"
android:text="@string/botonLee"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toRightOf="@+id/botonEscribir"
app:layout_constraintTop_toBottomOf="@+id/editText"
app:layout_constraintVertical_bias="0.38" />
<TextView
android:id="@+id/textView"
android:layout_width="350dp"
android:layout_height="232dp"
android:text="@string/propiedades"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.59"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText"
app:layout_constraintVertical_bias="0.257" />
</androidx.constraintlayout.widget.ConstraintLayout>
objeto Memoria
object Memoria {
@JvmStatic
@Throws(IOException::class)
fun escribirExterna(fichero: String, cadena: String): Boolean {
val tarjeta: File = Environment.getExternalStorageDirectory()
val miFichero = File(tarjeta.absolutePath, fichero)
//tarjeta = Environment.getExternalStoragePublicDirectory("datos/programas/");
//tarjeta.mkdirs();
return escribir(miFichero, cadena)
}
@Throws(IOException::class)
private fun escribir(fichero: File, cadena: String): Boolean {
val correcto = true
val bufferedWriter = fichero.bufferedWriter()
bufferedWriter.write(cadena)
bufferedWriter.close()
return correcto
/*
lateinit var fos: FileOutputStream
lateinit var osw: OutputStreamWriter
lateinit var out: BufferedWriter
val correcto = true
fos = FileOutputStream(fichero)
osw = OutputStreamWriter(fos)
out = BufferedWriter(osw)
out.write(cadena)
out.close()
return correcto
*/
}
fun mostrarPropiedades(fichero: File): String {
var formato: SimpleDateFormat = SimpleDateFormat("dd-MM-yyyy hh:mm:ss", Locale.getDefault())
val txt = StringBuffer()
try {
if (fichero.exists()) {
txt.append(fichero.name + '\n')
txt.append(fichero.absolutePath + '\n')
txt.append("Tamaño (bytes): " + fichero.length() + '\n')
txt.append("Fecha: " + formato.format(Date(fichero.lastModified())))
} else
txt.append("No existe el fichero " + fichero.name)
} catch (e: Exception) {
Log.e("Error", e.message.toString())
txt.append(e.message)
}
return txt.toString()
}
@JvmStatic
fun mostrarPropiedadesExterna(fichero: String): String {
val tarjeta: File = Environment.getExternalStorageDirectory()
val miFichero = File(tarjeta.absolutePath, fichero)
return mostrarPropiedades(miFichero)
}
@JvmStatic
fun disponibleEscritura(): Boolean {
var escritura = false
//Comprobamos el estado de la memoria externa (tarjeta SD)
val estado = Environment.getExternalStorageState()
if (estado == Environment.MEDIA_MOUNTED) escritura = true
return escritura
}
fun disponibleLectura(): Boolean {
var lectura = false
//Comprobamos el estado de la memoria externa (tarjeta SD)
val estado = Environment.getExternalStorageState()
if (estado == Environment.MEDIA_MOUNTED_READ_ONLY || estado == Environment.MEDIA_MOUNTED) lectura = true
return lectura
}
@JvmStatic
@Throws(IOException::class)
fun leerExterna(fichero: String?): String {
val miFichero: File
val tarjeta: File
//tarjeta = Environment.getExternalStoragePublicDirectory("datos/programas/");
tarjeta = Environment.getExternalStorageDirectory()
miFichero = File(tarjeta.absolutePath, fichero)
return leer(miFichero)
}
@Throws(IOException::class)
private fun leer(fichero: File): String {
val inputString = fichero.bufferedReader ().use {
it.readText ()
}
fichero.bufferedReader().close()
return inputString
/*
lateinit var fis: FileInputStream
lateinit var isw: InputStreamReader
lateinit var br: BufferedReader
lateinit var linea: String
val miCadena = StringBuilder()
fis = FileInputStream(fichero)
isw = InputStreamReader(fis)
br = BufferedReader(isw)
//while ((n = in.read()) != -1)
// miCadena.append((char) n);
linea = br.readLine()
while ( linea != null) {
miCadena.append(linea).append('\n')
linea = br.readLine()
}
br.close()
return miCadena.toString()
*/
}
}
MainActivity.kt
class MainActivity : AppCompatActivity(), View.OnClickListener {
lateinit var binding: ActivityMainBinding
//private lateinit var memoria: Memoria
companion object {
const val FICHERO = "ficheroExterna.txt"
const val REQUEST_WRITE = 1
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
val view: View = binding.root
setContentView(view)
binding.botonEscribir.setOnClickListener(this)
binding.botonLeer.setOnClickListener(this)
}
override fun onClick(view: View) {
// Si pulsamos en el botón escribir
if (view === binding.botonEscribir)
guardar()
else if (view === binding.botonLeer)
leer()
}
fun guardar() {
val permiso = Manifest.permission.WRITE_EXTERNAL_STORAGE
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
}
private fun mostrarMensaje(texto: String) {
Toast.makeText(this, texto, Toast.LENGTH_SHORT).show()
}
private fun escribir(texto: String) {
}
private fun leer() {
}
}
Guardar el fichero en memoria externa y pedir el permiso para escribir
public void guardar() {
String permiso = Manifest.permission.WRITE_EXTERNAL_STORAGE;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
String permiso = Manifest.permission.WRITE_EXTERNAL_STORAGE;
}
private void mostrarMensaje(String texto) {
Toast.makeText(this, texto, Toast.LENGTH_SHORT).show();
}
escribir
private void escribir() {
}
leer
private void leer() {
}
Ejercicio de la tarea online: Alarmas
Recursos adicionales
Descripción general del almacenamiento de archivos y datos
Para obtener información adicional sobre permisos, consulta los siguientes artículos:
Para descubrir cómo solicitar permisos, descarga las siguientes apps de ejemplo:


Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.