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

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

public class McKinneyBenjaminUpperFile
{
   public static void main(String [] args)throws IOException
   {
      Scanner keyboard = new Scanner(System.in);

      System.out.println("Benjamin's Uppercase File Converter\n");

      String file1;
      String file2;

      System.out.println("Enter the name of the file to read from.");
      file1 = keyboard.nextLine();

      File file1open = new File(file1);

      if(!file1open.exists())
      {
         System.out.println("The file you entered does not exists.");
         System.exit(0);
      }

      Scanner infile = new Scanner(file1);

      System.out.println("Enter the name of the file to write to: ");
      file2 = keyboard.nextLine();

      File file2open = new File(file2);

      if(file2open.exists())
      {
         System.out.println("The file you entered already exists.");
         System.exit(0);
      }

      PrintWriter outfile = new PrintWriter(file2);

      while(infile.hasNext())
      {
         for(int i=0;i<file2open.length();i++)
         {
            String line = infile.nextLine().substring(0,1);
            String newLine = line.toUpperCase();
            outfile.println(newLine);
         }
      }

      System.out.println("Conversion complete. " + file1 + " is now converted to all uppercase in " + file2);
   }
}
1
MicroBM 25 Фев 2016 в 09:21

2 ответа

Лучший ответ

Это ваш цикл while и for

 while(infile.hasNext())
  {
     for(int i=0;i<file2open.length();i++)
     {
        String line = infile.nextLine().substring(0,1);
        String newLine = line.toUpperCase();
        outfile.println(newLine);
     }
  }

File2open.length () виноват, потому что .length () возвращает длину файла, обозначенную абстрактным путем. Поскольку он длинный, я предполагаю, что он выполняет сумасшедшие вычисления, и причина, по которой ваша программа зависает, заключается в том, что она на самом деле просто выполняет много вычислений и все еще работает. Тем не менее ...

Это был бы лучший способ скрыть:

  while(infile.hasNextLine())
  {
        String line = infile.nextLine();
        String newLine = line.toUpperCase();
        outfile.println(newLine);
  }

Нет смысла делать отдельные подстроки.

РЕДАКТИРОВАТЬ: код не был прочитан правильно, поэтому .length фактически возвращает 0. Но, несмотря на это, .length делает что-то другое, чем вы думаете, я почти уверен.

2
Trace Carrasco 25 Фев 2016 в 06:54