Java - Я хачу, каб прачытаць імя файла з каманднага радка, то выкарыстоўвайце BufferedReader чытаць кожную радок

Я атрымліваю зацьменне чырвонай памылку падкрэслення на

 br = new BufferedReader(new FileReader(inFile));

лінія на «входной_файл». Гэта аб'ект, які я хацеў бы прачытаць, якую я лічу, змяшчае камандны радок імя файла/шлях, які я даю яго ў камандным радку. Ці магу я апрацоўка гэта няправільна?

import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {

     public static void main(String[] args) {
      if (0 < args.length) {
          File inFile = new File(args[0]);
      }

        BufferedReader br = null;

        try {

            String sCurrentLine;

            br = new BufferedReader(new FileReader(inFile));

            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

        } 

        catch (IOException e) {
            e.printStackTrace();
        } 

        finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}
2
абвясціць входной_файл за межамі блока, калі
дададзена аўтар lockstock, крыніца
блізка } для , калі непасрэдна перад } аб Асноўны метад
дададзена аўтар Sam, крыніца

10 адказы

Змяніць гэта:

if (0 < args.length) {
    File inFile = new File(args[0]);
}

да гэтага:

File inFile = null;
if (0 < args.length) {
   inFile = new File(args[0]);
} else {
   System.err.println("Invalid arguments count:" + args.length);
   System.exit();
}

таму што файл зменная не даступныя за межамі калі/іншае заяву.

Я дадаў у яшчэ (для выпадку, калі няма Арг не прыкладаецца) прыязнай паведамленне аб тым, лічыльнік аргумент з'яўляецца памылковым і выхад для праграмы.

5
дададзена
Не, вызначаючы входной_файл па-за калі/іншае заяву дае большы аб'ём (аб'ём знаходзіцца ў межах Асноўны метад)
дададзена аўтар Konstantin Yovkov, крыніца
Правільна, прапусціў выправіць гэта. Ура! :)
дададзена аўтар Konstantin Yovkov, крыніца
дзякуй за тону @KonstantinYovkov, вы эканоміце свой дзень.
дададзена аўтар Om Prakash, крыніца
Таму даданне заявы яшчэ цяпер дае большы прастор для входной_файла? Ці ты што проста, каб даць карыстачу лепшае веданне памылкі ARGS?
дададзена аўтар john stamos, крыніца
Выдатна, дзякуй. Я думаю, што вы можаце ўзяць з «Файл» ўнутры, калі заява зараз, калі вы ўжо аб'явілі входной_файл як такой па-за, калі, акрамя таго, што я думаю, што гэта добра.
дададзена аўтар john stamos, крыніца

Змяніць гэта:

if (0 < args.length) {
    File inFile = new File(args[0]);
}

да гэтага:

File inFile = null;
if (0 < args.length) {
   inFile = new File(args[0]);
} else {
   System.err.println("Invalid arguments count:" + args.length);
   System.exit();
}

таму што файл зменная не даступныя за межамі калі/іншае заяву.

Я дадаў у яшчэ (для выпадку, калі няма Арг не прыкладаецца) прыязнай паведамленне аб тым, лічыльнік аргумент з'яўляецца памылковым і выхад для праграмы.

5
дададзена
Не, вызначаючы входной_файл па-за калі/іншае заяву дае большы аб'ём (аб'ём знаходзіцца ў межах Асноўны метад)
дададзена аўтар Konstantin Yovkov, крыніца
Правільна, прапусціў выправіць гэта. Ура! :)
дададзена аўтар Konstantin Yovkov, крыніца
дзякуй за тону @KonstantinYovkov, вы эканоміце свой дзень.
дададзена аўтар Om Prakash, крыніца
Таму даданне заявы яшчэ цяпер дае большы прастор для входной_файла? Ці ты што проста, каб даць карыстачу лепшае веданне памылкі ARGS?
дададзена аўтар john stamos, крыніца
Выдатна, дзякуй. Я думаю, што вы можаце ўзяць з «Файл» ўнутры, калі заява зараз, калі вы ўжо аб'явілі входной_файл як такой па-за, калі, акрамя таго, што я думаю, што гэта добра.
дададзена аўтар john stamos, крыніца

Пераменная входной_файл губляе аб'ём за межамі блока, калі:

  if (0 < args.length) {
      File inFile = new File(args[0]);
  }

Змяніць на:

  File inFile = null;
  if (0 < args.length) {
      inFile = new File(args[0]);
     //Make sure the file exists, can read, etc...
  }
  else
  {
   //Do something if a required parameter is not provided...
  }
1
дададзена
Звярніце ўвагу, што адзін павінен паклапаціцца, каб аб'ём і звязаных з імі меркаванні сінхранізацыі па пераменным файлу ў пытанні. Абмежаваць у інкапсуляванага метад як найлепшая практыка.
дададзена аўтар Darrell Teague, крыніца

Пераменная входной_файл губляе аб'ём за межамі блока, калі:

  if (0 < args.length) {
      File inFile = new File(args[0]);
  }

Змяніць на:

  File inFile = null;
  if (0 < args.length) {
      inFile = new File(args[0]);
     //Make sure the file exists, can read, etc...
  }
  else
  {
   //Do something if a required parameter is not provided...
  }
1
дададзена
Звярніце ўвагу, што адзін павінен паклапаціцца, каб аб'ём і звязаных з імі меркаванні сінхранізацыі па пераменным файлу ў пытанні. Абмежаваць у інкапсуляванага метад як найлепшая практыка.
дададзена аўтар Darrell Teague, крыніца

Ваша пераменная, входной_файл , з'яўляецца лакальным для умяшчаючага калі-блок.

Магчыма, гэта:

 public static void main(String[] args) {
      File inFile = null;

      if (0 < args.length) {
          inFile = new File(args[0]);
      }
1
дададзена

Ваша пераменная, входной_файл , з'яўляецца лакальным для умяшчаючага калі-блок.

Магчыма, гэта:

 public static void main(String[] args) {
      File inFile = null;

      if (0 < args.length) {
          inFile = new File(args[0]);
      }
1
дададзена

входной_файл абвешчаны ў, калі заяву. Такім чынам, гэта сфера заканчваецца на лініі 11;

1
дададзена

входной_файл абвешчаны ў, калі заяву. Такім чынам, гэта сфера заканчваецца на лініі 11;

1
дададзена

Пасля «калі» блока аператараў, вы можаце скінуць змесціва «входной_файл» на аб'ект сканэра.

Scanner scannedIn = new Scanner(inFile);

Затым з дапамогай «.next» метад, каб праверыць, што вы звяртаецеся да файла.

System.out.println(scannedIn.next());
0
дададзена

Пасля «калі» блока аператараў, вы можаце скінуць змесціва «входной_файл» на аб'ект сканэра.

Scanner scannedIn = new Scanner(inFile);

Затым з дапамогай «.next» метад, каб праверыць, што вы звяртаецеся да файла.

System.out.println(scannedIn.next());
0
дададзена