FileReader возвращает нулевое значение - PullRequest
0 голосов
/ 18 сентября 2018

я учусь читать файл с пробелом.Я начал все с нуля.вот что я сделал:

  1. Загрузите и установите npm
  2. Установите Phonegap через npm (npm install -g phonegap)
  3. Установите Cordova через npm (npm install -g cordova), это, вероятно, не нужно, но я все равно это сделал
  4. Создайте мое тестовое приложение (phonegap create testfile)
  5. Добавить платформу Android (платформа PhoneGap добавить Android)

После этого я заметил, что в моей папке плагинов и в моем файле config.xml уже есть файл cordova-plugin-file, поэтому я не установил его (поправьте меня, если я ошибаюсь в этом)

Затем в нижней части файла index.html я отредактировал его следующим образом:

    .
    .
    .

    <script type="text/javascript">
        app.initialize();
    </script>
    <script>
        function startFile()
        {
            window.resolveLocalFileSystemURL('file:///storage/emulated/0/newfile.txt', readFile, fail);
        }

        function readFile(fileEntry) 
        {
            fileEntry.file(function(file) 
            {
                var reader = new FileReader();
                reader.onloadend = function(e) 
                {
                    var content = this.result;
                    alert("file content: " + content);
                };
                reader.readAsText(file);
            });
        }

        function fail(e)
        {
            alert(e.code);
        }
    </script>
    <input type="button" value="read file" onclick="startFile()" />
</body>

</html>

Довольно просто, поскольку я просто хочу посмотреть, как он читает файл, и просмотреть его в окне сообщения с предупреждением.

Я уже скопировал файл newfile.txt в свое хранилище Android, похоже, он нашел файл, но в предупреждении отображается «file content: null»

содержимое файла просто "Привет, мир".Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 21 сентября 2018

Я нашел решение.вместо того, чтобы захватить файл на resolLocalFileSystemURL, я сначала взял каталог, а затем извлек файл из объекта directoryEntry

    function startFile()
    {
        window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, readDir, fail);
        // cordova.file.externalRootDirectory = 'file:///storage/emulated/0/'
    }

    function readDir(dir)
    {
        dir.getFile("newfile.txt", {create: false},readFile,fail);
    }

    function readFile(fileEntry) 
    {
        fileEntry.file(function(file) 
        {
            var reader = new FileReader();
            reader.onloadend = function(e) 
            {
                var content = this.result;
                alert("file content: " + content);
            };
            reader.readAsText(file);
        });
    }

    function fail(e)
    {
        alert(e.code);
    }
...