2016-04-06 8 views
1

Linux komut satırından bir metin dosyasını Java programıma kabul etmeye çalışıyorum ancak derleyici bana başlıkta belirtilen hatayı veriyor. Hata, "String fileName = args [0];" yazan satırda meydana geldiğini söylüyor. Birisi neden olduğunu biliyor mu? İşte benim kodudur:ArrayIndexOutOfBoundsException: 0, Java'daki Linux komut satırından bir dosyada okumaya çalışırken ortaya çıkar?

public class Parsons_Decoder 
{ 
    // method: main 
    // purpose: receives key-phrase and sequence of integers and 
    // prints the secret message to the screen. 
    public static void main(String[] args) throws IOException 
    { 
    String fileName = args[0]; 

    // reads incoming file (if it exists) and saves the key-phrase to 
    // String variable "keyPhrase" 
    File testFile = new File(fileName); 

    if(!testFile.exists()) 
    { 
     System.out.println("\nThis file does not exist.\n"); 
     System.exit(0); 
    } 

    Scanner inputFile = new Scanner(args[0]); 
    String keyPhrase = inputFile.nextLine(); 

    // creates an ArrayList and stores the sequence of integers into it 
    ArrayList<Integer> numArray = new ArrayList<Integer>(); 

    while(inputFile.hasNextInt()) 
    { 
     numArray.add(inputFile.nextInt()); 
    } 

    // decodes and prints the secret message to the screen 
    System.out.println(); 
    System.out.print("Your secret message is: "); 

    for(int i = 0; i < numArray.size(); i++) 
    { 
     int num = numArray.get(i); 
     System.out.print(keyPhrase.charAt(num)); 
    } 
    System.out.println("\n"); 

    //keyboard.close(); 
    inputFile.close(); 
    } 
} 
+1

Programı nasıl çalıştırıyorsunuz? Argümanlar ile tam komut lütfen – 3kings

+0

CLI'de neler yazıyorsunuz? – Gendarme

+0

Bunun için üzgünüm, komut satırı olmalıdır: java Parsons_Dedocer thelonewanderer

cevap

4

Güncelleme:

Profesörün aşağıdaki gibi bir komutu kullanarak, Stdin ile bir dosyada okumanızı istiyor:

java Diaz_Decoder < secretText1.txt 

Sizin main() yöntem şu şekilde olmalıdır:

public static void main(String[] args) throws IOException { 
    // create a scanner using stdin 
    Scanner sc = new Scanner(System.in); 

    String keyPhrase = inputFile.nextLine(); 

    // creates an ArrayList and stores the sequence of integers into it 
    ArrayList<Integer> numArray = new ArrayList<Integer>(); 

    while (inputFile.hasNextInt()) { 
     numArray.add(inputFile.nextInt()); 
    } 

    // decodes and prints the secret message to the screen 
    System.out.println(); 
    System.out.print("Your secret message is: "); 

    for (int i = 0; i < numArray.size(); i++) { 
     int num = numArray.get(i); 
     System.out.print(keyPhrase.charAt(num)); 
    } 

    System.out.println("\n"); 
} 
+0

Teşekkür ederim, bu daha iyi çalıştı, ama profesörüm bize "<" kullanılan bir örnek verdi gösterdi, bu şekilde yapmak için herhangi bir yolu var mı? – thelonewanderer

+0

Bunu gerçekten yazdığından emin misin? Belki de jenerik bir dosya için kısayol kullanıyordu, ör. java Parsons_Decoder '? –

+0

Bize programlarımızla etkileşimlerimizin neye benzemesi gerektiği konusunda örnek bir çalışma sağladı, işte bu bölümün talimatlarından bir ekran görüntüsü: https://drive.google.com/file/d/0BwujWiqVRKKsMzdRZDRPcTFQVkk/view?usp=sharing – thelonewanderer

1

Açıkladığınız bağlantıya ve sağladığınız bağlantıya (soruda değil, bir yorumda bulunmalıdır) dayalı olarak, prof çalıştırdığınızda, dosyanın içeriğini "standart" (STDIN) yoluyla kabul eden bir program yazmanızı ister. yeniden yönlendirme kullanarak bir POSIX stili kabuk komut satırı olarak.

Bu gerçekten bir gereklilikse, yalnızca argüman olarak verilen dosyayı okuyamazsınız, ancak programınızı STDIN'den okuyacak şekilde değiştirmeniz gerekir. Buradaki temel kavram, "<" un program argüman listenizde mevcut olmamasıdır. Java işlemini çalıştıran kabuk (Bash, Ksh, vb.) Ve sağ taraftaki dosya ile sol taraftaki işlem arasında bir "boru" kurulumu tarafından tüketilecektir. Bu durumda, süreç programınızı çalıştıran Java işleminizdir.

yılında standardını okuyabilir bir Java programı yazmak için bazı fikirler edinmek için "java STDIN'den" için bir arama yapmayı deneyin.

arada, yönlendirme ile çalıştırdığınızda programın bir ArrayIndexOutOfBoundError ile çökerse Bu şekilde, hala içinde bir hata vardır. Kabuk komut satırını işlemeyi bitirdikten sonra 0 dosya argümanının bulunduğu durumu test etmeniz ve ele almanız gerekiyor. Tam işaretler istiyorsanız, hata ve kenar durumlarını ele almanız gerekir.

İlgili konular