Copy file android kotlin

How to Copy content of one File to other File in Kotlin

Copy Content of One File to Other File in Kotlin

Learn how to copy content of one file to other file in Kotlin using extension function to Java Class java.io.File, copyTo() with example Kotlin program.

For scenarios to copy a file to other location, overwrite if it already present, or not overwrite if already present, refer the Kotlin example programs given below.

Syntax – File.copyTo()

The syntax of File.copyTo() method is

A simple example to use File.copyTo() is

Parameter Required/Optional Description
source_file REQUIRED Source file name
target_file REQUIRED Target file name
overwrite OPTIONAL boolean value : if true, overwrites the file, else not. The default value is false and hence does not overwrite if the target file is already present.
bufferSize OPTIONAL Default buffersize depends on the platform. You may provide an other buffersize if required

Example 1 – Copy File in Kotlin

In the following example, we copy the contents of file file.txt to the file target_file.txt .

example.kt

Example 2 – Overwrite Target File if Already Present

At times, the target file could be already present. In such scenarios, we can overwrite the content of destination file, by passing true as second argument to copyTo() method.

In this example, we have target_file.txt already present.

example.kt

The previous contents of target_file.txt are cleared, and the contents of file.txt will be copied to target_file.txt .

Example 3 – Do not Overwrite if Target File Exists

We can also not copy the contents of this file to target file, if the target file is already present. For that, we have to pass false as second argument to copyTo() method.

Источник

7. Основы Kotlin. Файловые операции

Программы, которые мы пишем, так или иначе должны взаимодействовать с пользователем и внешней средой — операционной системой, устройствами компьютера, сетью Интернет. Простейшим способом взаимодействия является ввод с консоли и вывод на консоль, но сейчас такой способ применяется крайне редко. Более совершенным способом взаимодействия являются файлы — многие программы берут из них настроечную или входную информацию, и используют их для сохранения результатов своей работы или различных настроек. Например, всевозможные редакторы позволяют открывать файлы в определённом формате, просматривать и/или изменять их, сохранять файлы на диске компьютера или в сети Интернет.

В библиотеке Java внутри пакета java.io имеется ряд типов, обеспечивающих возможность работы с файлами, а библиотека Котлина дополняет их некоторыми удобными возможностями. Как обычно, рассмотрим часть этих возможностей на примере.

Краеугольный тип, используемый для работы с файлами в Котлине — тип java.io.File . В соответствии с названием, он предназначен для различных операций с файлами; объект этого типа соответствует какому-либо реальному файлу, чаще всего находящемуся на жёстком диске. Для создания файла используется специальная функция-конструктор: File(inputName) или File(outputName) в примере. Если в аргументе конструктора указано только имя файла — поиск файла происходит в текущей директории, а если аргумент содержим также путь к файлу — то в директории, указанной этим путём. Специфика конструктора заключается в том, что его имя совпадает с типом объекта, которую он создаёт, и он имеет результат соответствующего типа. Более подробно мы поговорим о конструкторах в следующем уроке.

Обмен данными с файлом может происходить в режиме чтения либо в режиме записи. В режиме чтения информации, заданное имя должно соответствовать уже существующему файлу. Один из способов получения информации из файла — вызов функции file.readLines() . Результат вызова — список строк, из которых состоит файл. Каждый String в этом списке соответствует одной строке файла, строки файла разделяются символом «возврат каретки» и / или «новая строка».

В режиме записи информации, заданное имя может не соответствовать существующему файлу — в этом случае он будет создан. Для записи информации, необходимо создать один из объектов, обеспечивающих такую возможность. В примере, таким объектом является val writer = File(outputName).bufferedWriter() — то есть необходимо вызвать функцию bufferedWriter() на получателе, соответствующем исходному файлу. Как видно из текста примера, writer (писатель) имеет функции writer.newLine() (добавление в файл новой строки), writer.write(string) (добавление в файл заданной строки) и writer.close() (закрытие писателя, выполняется строго ПОСЛЕ выполнения всех остальных действий и фиксирует итоговое состояние файла).

Мы перечислили все файловые операции, присутствующие в исходном примере. Внутри цикла for , каждая из строк файла разбивается по пробелам на слова, с этой целью используется Regex(«\\s+») . В currentLineLength накапливается длина текущей строки ВЫХОДНОГО файла. Если в текущей строке достаточно места для очередного слова ВХОДНОГО файла, слово добавляется в текущую строку, в противном случае в файл добавляется перевод строки и слово добавляется в новую строку. Пустые строки входного файла, как и сказано в задании, переносятся в выходной файл без изменений.

Источник

Котлин: Как создать / добавить файл (и поделиться)

У меня есть список массивов данных в моем приложении, которые я бы сейчас хотел записать в файл (csv) и использовать стороннее приложение (например, электронную почту), чтобы поделиться этим файлом csv. Мне не повезло найти полезные ресурсы для создания, поиска пути к файлу и добавления файла в Kotlin. У кого-нибудь есть опыт с этим или есть примеры, на которые можно указать? Просто для начала я пытаюсь написать заголовок и закрыть файл, чтобы я мог видеть, что он пишет правильно.

Это то, что я имею сейчас:

Это не вызывает исключения, но я не могу найти файл в файловой системе. Я использую физический планшет для тестирования / отладки. Я проверил папку com . для моего приложения.

3 ответа

Похоже, существует множество способов создать файл и добавить его в зависимости от минимальной версии API, для которой вы разрабатываете. Я использую минимальный Android API 22. Код для создания / добавления файла ниже:

Я не могу найти файл в файловой системе

Используйте Обозреватель файлов устройств Android Studio и найдите /data/data/. /files/ , где . — идентификатор вашего приложения.

Кроме того, вы можете написать свой код более кратко, как:

use() автоматически закроет PrintWriter , а PrintWriter даст вам более естественный API для записи текста.

openFileOutput() создает личный файл, вероятно, внутри хранилища приложения. Эти файлы не доступны для просмотра по умолчанию. Если вы хотите создать файл, к которому можно просматривать, вам понадобится разрешение WRITE_EXTERNAL_STORAGE, и вы захотите создать файлы в каталог, такой как предоставляется getExternalFilesDir()

Источник

Let’s Build a File Explorer in Kotlin

Have you been away from Kotlin for a while? Wanna practice your Kotlin skills? Wanna build an Android app in Kotlin?

If yes, then I have something for you.

I have written a 5 part tutorial series, in which you will build a basic File Explorer application in Android using Kotlin.

You will start from scratch, setting up the UI and then implementing the corresponding functionality. I will guide you through every feature that is included in the application and keep showing you tips and tricks about Kotlin every now and then. All in all this is a great way to refresh your Kotlin skills.

Kotlin File Explorer

Below are screenshots of completed application.

The source code of completed application can be found at this GitHub repo (Clone the repo as it will help you whenever you are stuck).

Tutorial Series

Part 1 — Introduction and Set up

You will start with setting up an empty project and configure permissions that are required for accessing the file system in Android. You will add a basic File Provider which is required as of Android 7.0.

Part 2 — Reading files from paths

In this part you will set up functions that will read files from a particular path in the file system. Then you will display these files in RecyclerView for the user to see and interact with. This might sound simple but we will implement this functionality with reusability in mind so there is more to it than you think!

Part 3 — Navigating through File System

After you are done reading files from a path, you will add the functionality for the user to navigate through the file system i.e. whenever the user clicks on a folder, you will open up the list of files contained inside that folder and so on.

Part 4 — Adding Breadcrumbs

Now comes the fun part. You might have seen in many file manager applications, in the Toolbar they have a way to navigate back to a point in the file system where you came from, these are called breadcrumbs. You will implement this feature!

Part 5 — Creating/Deleting files and folders

In this part you will add feature to create/delete file and folders anywhere in the file system.

Part 6— Copying/Moving files and folders

I have written a 5 part tutorial series, and you might wonder why is 6th part mentioned. No! this is not a tutorial. This is your homework 😀

I hope you enjoy this short series on Kotlin.

Источник

Kotlin Native: следите за файлами

Когда вы пишите command line утилиту, последнее, на что вам хочется полагаться, так это на то, что на компьютере где она будет запущена установлен JVM, Ruby или Python. Так же хотелось бы на выходе иметь один бинарный файл, который будет легко запустить. И не возиться слишком много с memory management’ом.

По вышеозначенным причинам, в последние годы всегда, когда мне нужно было писать подобные утилиты, я использовал Go.

У Go относительно простой синтаксис, неплохая стандартная библиотека, есть garbage collection, и на выходе мы получаем один бинарник. Казалось бы, что еще нужно?

Не так давно Kotlin так же стал пробовать себя на схожем поприще в форме Kotlin Native. Предложение звучало многообещающе — GC, единый бинарник, знакомый и удобный синтаксис. Но все ли так хорошо, как хотелось бы?

Задача, которую нам предстоит решить: написать на Kotlin Native простой file watcher. Как аргументы утилита должна получать путь к файлу и частоту проверки. Если файл изменился, утилита дожна создать его копию в той же папке с новым именем.

Иначе говоря, алгоритм должен выглядеть следующим образом:

Ладно, с тем чего хотим добиться вроде бы разобрались. Время писать код.

Среда

Первое, что нам потребуется — это IDE. Любителей vim попрошу не беспокоиться.

Запускаем привычный IntelliJ IDEA и обнаруживаем, что в Kotlin Native он не может от слова совсем. Нужно использовать CLion.

На этом злоключения человека, который в последний раз сталкивался с C в 2004 еще не окончены. Нужен toolchain. Если вы используете OSX, скорее всего CLion обнаружит подходящий toolchain сам. Но если вы решили использовать Windows и на C не программируете, придется повозиться с tutorial’ом по установке какого-нибудь Cygwin.

IDE установили, с toolchain’ом разобрались. Можно уже начать код писать? Почти.
Поскольку Kotlin Native еще несколько экспериментален, плагин для него в CLion не установлен по умолчанию. Так что прежде, чем мы увидим заветную надпись «New Kotlin/Native Application» придется его установить вручную.

Немного настроек

И так, наконец-то у нас есть пустой Kotlin Native проект. Что интересно, он основан на Gradle (а не на Makefile’ах), да еще на Kotlin Script версии.

Заглянем в build.gradle.kts :

Единственный плагин, который мы будем использовать называется Konan. Он то и будет производить наш бинарный файл.

В konanArtifacts мы указываем имя исполняемого файла. В данном примере получится file_watcher.kexe

Пора бы уже и код показать. Вот он, кстати:

Обычно у command line утилиты бывают так же опциональные аргументы и их значения по умолчанию. Но для примера будем предполагать, что аргумента всегда два: path и interval

Для тех, кто с Kotlin уже работал можем показаться странным, что path оборачивается в свой собственный класс File , без использования java.io.File . Объяснение этому — черезе минуту-другую.

Если вы вдруг не знакомы с функцией require() в Kotlin — это просто более удобный способ для валидации аргументов. Kotlin — он вообще про удобство. Можно было бы написать и так:

В целом, тут пока обычный Kotlin код, ничего интересного. А вот с этого момента станет повеселей.

Давайте будем пытаться писать обычный Kotlin-код, но каждый раз, когда нам нужно использовать что-нибудь из Java, мы говорим «упс!». Готовы?

Вернемся к нашему while , и пусть он отпечатывает каждый interval какой-нибудь символ, к примеру точку.

Thread — это класс из Java. Мы не можем использовать Java классы в Kotlin Native. Только Kotlin’овские классы. Никакой Java.

Кстати, потому в main мы и не использовали java.io.File

Хорошо, а что тогда можно использовать? Функции из C!

Добро пожаловать в мир C

Теперь, когда мы знаем что нас ждет, давайте посмотрим как выглядит функция exists() из нашего File :

File это простой data class , что дает нам имплементацию toString() из коробки, которой мы потом воспользуемся.

«Под капотом» мы вызываем C функцию access() , которая возвращает -1 , если такого файла не существует.

Дальше по списку у нас функция modified() :

Функцию можно было бы немного упростить используя type inference, но тут я решил этого не делать, чтобы было понятно, что функция не возвращает, к примеру, Boolean .

В этой фукнции есть две интересные детали. Во-первых, мы используем alloc() . Поскольку мы используем C, иногда нужно выделять структуры, а делается это в C вручную, при помощи malloc().

Высвобождать эти структуры тоже нужно вручную. Тут на помощь приходит функция memScoped() из Kotlin Native, которая это сделает за нас.

Нам осталось рассмотреть наиболее увесистую функцию: сopyAside()

Тут мы используем С функцию copyfile_state_alloc() , которая выделяет нужную для copyfile() структуру.

Но и высвобождать нам эту структуру приходится самим — используя
copyfile_state_free(state)

Последнее, что осталось показать — это генерация имен. Тут просто немного Kotlin:

Это довольно наивный код, который игнорирует многие кейсы, но для примера сойдет.

Теперь как все это запускать?

Один вариант — это конечно использовать CLion. Он все сделает за нас.

Но давайте вместо этого используем command line, чтобы лучше понять процесс. Да и какой-нибудь CI не будет запускать наш код из CLion.

Первым делом мы компилируем наш проект используя Gradle. Если все прошло успешно, появится следующее сообщение:

Шестнадцать секунд?! Да, в сравнение с каким-нибудь Go или даже Kotlin для JVM, результат неутешителен. И это еще крошечный проект.

Теперь вы должны увидеть бегущие по экрану точки. И если вы измените содержимое файла, об этом появится сообщение. Что-то вроде такой картины:

Время запуска замерить сложно. Зато мы можем проверить, сколько памяти занимает наш процесс, используя к примеру Activity Monitor: 852KB. Неплохо!

Немного выводов

И так, мы выяснили что при помощи Kotlin Native мы можем получить единый исполняемый файл с memory footprint’ом меньше, чем у того же Go. Победа? Не совсем.

Как это все тестировать? Те кто работал с Go или Kotlin’ом знаю, что в обоих языках есть хорошие решения для этой важной задачи. У Kotlin Native с этим пока что все плохо.

Вроде бы в 2017ом JetBrains пытались это решить. Но учитывая, что даже у официальных примеров Kotlin Native нет тестов, видимо пока не слишком успешно.

Другая проблема — crossplatform разработка. Те, кто работали с C побольше моего уже наверняка заметили, что мой пример будет работать на OSX, но не на Windows, поскольку я полагаюсь на несколько функций доступных только с platform.darwin . Надеюсь что в будущем у Kotlin Native появится больше оберток, которые позволят абстрагироваться от платформы, к примеру при работе с файловой системой.

Все примеры кода вы можете найти тут

И ссылка на мою оригинальную статью, если вы предпочитаете читать на английском

Источник

Читайте также:  Motor depot много денег андроид
Оцените статью