Я пытаюсь прочитать несколько файлов .txt, но hasNext() всегда возвращает false.

for(int i = 1; i <= 126; i++)
{
            StringBuilder currentSong = new StringBuilder();
            try 
            {
                String name = i + ".txt";
                File file = new File(name);
                if(file.exists())
                {
                    Scanner input = new Scanner(file);


                    while(input.hasNext())                         //this gets skipped
                    {
                        currentSong.append(input.nextLine());
                    }

                    if(!input.hasNext())                          //this executes
                    {
                        Desktop d = Desktop.getDesktop();
                        d.open(file);
                    }


                    PrintWriter write = new PrintWriter("new/" +  i + ".txt");
                    write.write(currentSong.toString());
                    write.close();
                    input.close();
                }
                else
                {
                    JOptionPane.showMessageDialog(null, "No file was found");
                }


            } 

            catch (FileNotFoundException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

Когда программа открывает файл, он не пустой и содержит текст, но когда я вбегаю, он hasNext() возвращает false ...

Это содержимое первого файла, остальные следуют аналогичному шаблону. Это русские песни:

1
Ты искупил мир от греха,
И дал ему любовь и свет
Зажёг потухшие сердца
и дал надежду.
Мы пред Тобою предстоим
и каждый дорог для Тебя,
За все, Отец, благодарим
и превозносим.

/bПрипев:
/bСлава Тебе и величье,
/bСлава в веках и народах,
/bСила твоя безгранична,
/bМилость Твоя во все роды.

Ты открываешь новый мир
любви, надежды и красоты.
С Тобой не трудно мне идти –
ведь Ты со мною.
Мы пред Тобою предстоим
и каждый дорог для Тебя,
За все, Отец, благодарим
и превозносим.

/bПрипев:
/bСлава Тебе и величье,
/bСлава в веках и народах,
/bСила твоя безгранична,
/bМилость Твоя во все роды.
-1
Eddie 1 Янв 2018 в 03:42

2 ответа

Лучший ответ

Иногда кодировка универсального алфавита (UTF-8) не подходит для алфавита типа Cyrillic, поэтому либо этот utf-8 игнорирует символ, либо приводит к другому типу символов из источника.

В вашем случае вы читаете Russian согласно google.translate.com auto detect, и я протестировал свой исходный код на более чем 10 языках и получил результат, аналогичный входному файлу,

В консоли eclipse будет отображаться только ?, потому что он поддерживает простой english charset, насколько мне известно, даже не utf-8,

Input.txt помещен в каталог src -

1   Russian
Ты искупил мир от греха,
И дал ему любовь и свет
Зажёг потухшие сердца
и дал надежду.
Мы пред Тобою предстоим
и каждый дорог для Тебя,
За все, Отец, благодарим
и превозносим.

2   English
Jack and Jill
Went up the hill
To fetch a pail of water
Jack fell down
And broke his crown,
And Jill came tumbling after
Up Jack got,
And home did trot
As fast as he could caper;
To old Dame Dob,
Who patched his nob
With vinegar and brown paper.

3   Chinese
钱唐湖春行

孤山寺北贾亭西
水面初平云脚低
几处早莺争暖树
谁家新燕啄春泥
乱花渐欲迷人眼
浅草才能没马蹄
最爱湖东行不足
绿杨阴里白沙堤

4   Urdu
کبھی تم مجھ سے ملتے ہو
توڑنا مت کرو،

زندگی آپ کے ساتھ جاتا ہے،
مسکر اندر ہے ...

ایم .سرپر میرپوری

5   Hindi
पुष्प की अभिलाषा
- माखनलाल चतुर्वेदी
चाह नहीं मैं सुरबाला के
गहनों में गूँथा जाऊँ
चाह नहीं, प्रेमी-माला में
बिंध प्यारी को ललचाऊँ
चाह नहीं, सम्राटों के शव
पर हे हरि, डाला जाऊँ
चाह नहीं, देवों के सिर पर
चढ़ूँ भाग्य पर इठलाऊँ
मुझे तोड़ लेना वनमाली
उस पथ पर देना तुम फेंक
मातृभूमि पर शीश चढ़ाने
जिस पर जावें वीर अनेक ।।

6   Korean
초겨울 편지/ 김용택

앞산에
고운 잎
다 졌답니다
빈 산을 그리며
저 강에
흰눈
내리겠지요
눈 내리기 전에
한번 보고 싶습니다

7   Tamil
புத்தாண்டு வாழ்த்துக்கள்
பூக்கட்டும் புதுமலர்,
வீசட்டும் நம்மில்!!
இனிக்கட்டும் திருநாள்,
பிறக்கட்டும் புதுசிந்தனை!!
போகட்டும் பகைமை,
இனையட்டும் உறவு!!
விலகட்டும் தாழ்வு,
வாழட்டும் மனிதம்!!
தோன்றட்டும் வாய்ப்பு,
அடையட்டும் இலக்கு!!
பரவட்டும் அமைதி,
மாறட்டும் புதிய புத்தாண்டு!!

8   Marathi
चल माणसा भाकीत कर
मन तुझं उघड कर
जगण्याचा प्रवाह शिथिल कर
सुकर कर सुजय कर

9   Bengali
ঘোর কেটে গেলে
- আবিদ আনোয়ার
হয়তো এখনও আছি অর্ধস্ফুট গোলাপের মতো-- 
বোঝেনি শরীর-সত্তা কাকে বলে পূর্ণ জাগরণ;
দরিদ্র ইন্দ্রিয়গুলো চিনেছে যে বস্তুবাস্তবতা
কখনও জাগ্রত হলে চিনে নিতো আরেক জীবন। 
যদি এ-রহস্যমালা কোনোদিন এই গূঢ় অন্তর্বাস খোলে
হয়তো দেখবো কিছু বর্গক্ষেত্র ঢুকে বসে আছে
অসংগত পৃথিবীর বেমক্কা বর্তুলে:
প্রকৃত রাজার কাঁধে গোলামের তকমা তুলে দিয়ে
গোলাম রাজত্ব করে জগদ্দল প্রভুত্বের পতাকা উড়িয়ে।
দিব্যদৃষ্টি খুলে গেলে তুমি দেখে নিয়ো

10  German
Der Weg nicht genommen:

Zwei Straßen wichen in gelbem Holz aus,
Und tut mir leid, ich konnte nicht beide reisen
Und sei ein Reisender, lange habe ich gestanden
Und schaute so weit ich konnte nach unten
Zu wo es sich im Unterholz verbog;

11  Punjabi
ਲੋਹੜੀ ਦੇ ਗੀਤ

ਸੁੰਦਰ ਮੁੰਦਰੀਏ - ਹੋ
ਸੁੰਦਰ ਮੁੰਦਰੀਏ - ਹੋ!
ਤੇਰਾ ਕੌਣ ਵਿਚਾਰਾ - ਹੋ!
ਦੁੱਲਾ ਭੱਟੀ ਵਾਲਾ - ਹੋ!
ਦੁੱਲੇ ਧੀ ਵਿਆਹੀ - ਹੋ!
ਸੇਰ ਸੱਕਰ ਆਈ - ਹੋ!
ਕੁੜੀ ਦੇ ਬੋਝੇ ਪਾਈ - ਹੋ!
ਕੁੜੀ ਦਾ ਲਾਲ ਪਟਾਕਾ - ਹੋ!
ਕੁੜੀ ਦਾ ਸਾਲੂ ਪਾਟਾ - ਹੋ!
ਸਾਲੂ ਕੌਣ ਸਮੇਟੇ - ਹੋ!
ਚਾਚਾ ਗਾਲ੍ਹੀ ਦੇਸੇ - ਹੋ!
ਚਾਚੇ ਚੂਰੀ ਕੁੱਟੀ - ਹੋ!
ਜ਼ਿੰਮੀਦਾਰਾਂ ਲੁੱਟੀ - ਹੋ!
ਜ਼ਿੰਮੀਦਾਰ ਸਦਾਓ - ਹੋ!
ਗਿਣ ਗਿਣ ਪੌਲੇ ਲਾਓ - ਹੋ!
ਇੱਕ ਪੌਲਾ ਘਟ ਗਿਆ!
ਜ਼ਿਮੀਂਦਾਰ ਨੱਸ ਗਿਆ - ਹੋ!

И я использовал Cyrillic (ISO) - charset=iso-8859-5 для чтения и записи, так что вот мой исходный код -

package com.practice;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class ReadFile {
    public static void main(String[] args) {
        try {
            File inputFile = new File("src/Input.txt");
            File outputFile = new File("src/Output.txt");

            BufferedReader reader = new BufferedReader(new InputStreamReader
                            (new FileInputStream(inputFile), "iso-8859-5"));

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter
                            (new FileOutputStream(outputFile), "iso-8859-5"));

            String line = null;
            while((line = reader.readLine()) != null) {
                System.out.println(line);
                writer.write(line + "\n");
            }

            writer.flush();
            writer.close();
            reader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Пожалуйста, не оскорбляйте меня, если вы не найдете примера на каком-то конкретном языке, это просто для тестирования и помощи,

1
Pang 24 Авг 2018 в 01:49

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

import java.util.*;
import java.io.*;

//reads each line from a .txt file and prints to console log
//using hasNext() as condition to while statement (while hasNext() is still true)

public class exampleScannerHasNext
{//end class
   public static void main(String[] args) throws FileNotFoundException
   {//start main

   String eachLineRead;
   File file = new File("johnLennon.txt");
   Scanner inputFile = new Scanner(file);

   while(inputFile.hasNext())
   {    
      eachLineRead = inputFile.nextLine();
      System.out.println(eachLineRead);
   }
   inputFile.close();
   }//end main
}//endclass

Я использую этот текстовый файл с именем «johnLennon.txt»:

Imagine there's no heaven
It's easy if you try
No hell below us
Above us only sky
Imagine all the people
Living for today... Aha-ah...

Imagine there's no countries
It isn't hard to do
Nothing to kill or die for
And no religion, too
Imagine all the people
Living life in peace... You...

You may say I'm a dreamer
But I'm not the only one
I hope someday you'll join us
And the world will be as one

Imagine no possessions
I wonder if you can
No need for greed or hunger
A brotherhood of man
Imagine all the people
Sharing all the world... You...

Затем, когда вы убедились, что проблема не в hasNext (), вы можете начать добавлять в свой код дополнительные функции, такие как инструкции try catch, если файл существует или нет, и даже записывать строки в новый файл. Я был бы рад подробнее рассказать о расширении вашего кода. Просто дайте мне знать, и мы вместе напишем метод. -Джеймс

0
James P. 1 Янв 2018 в 06:43