Ir ao conteúdo

Posts recomendados

Postado

erro: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
        at Main.main(Main.java:9)

 

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.StringJoiner;

public class Main {
    public static void main(String args[]) {
        String palavra;
        String nomeArquivo = args[0];
        for (int i = 1; i < args.length; i++) {
            nomeArquivo += " " + args[i];
         }

        File inputFile = new File(nomeArquivo);
        Scanner str = new Scanner(System.in);
        System.out.println(" Digite a palavra a ser buscada:");
        palavra = str.nextLine();
        str.close();
        try {
            Scanner scanner = new Scanner(inputFile);
            while (scanner.hasNextLine()) {
                String linha = scanner.nextLine();
                String[] palavras = linha.split(" ");
                for (int i = -1; i < palavras.length; i++) {
                    if (palavras[i].equals(palavra)) {
                        System.out.println(" A palavra " + palavra + " aparece na linha " + i);
                    }
                }
            }
            scanner.close();
            System.out.print("");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}

json:

 

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Launch Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "Launch Main",
            "request": "launch",
            "mainClass": "Main",
            "projectName": "Brian",
            "args": "Metal Contra as Nuvens.txt"
        }
    ]
}

arquivo q estou tentando ler:

Metal Contra as Nuvens.txt

tambem tentei assim:

 

package Brian;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String palavra;
        String nomeArquivo = args[0];
        for (int i = 1; i < args.length; i++) {
            nomeArquivo += " " + args[i];
            System.out.println(args);
        }

        File inputFile = new File(nomeArquivo);
        System.out.println(inputFile);
        Scanner str = new Scanner(System.in);
        System.out.println(" Digite a palavra a ser buscada:");
        palavra = str.nextLine();
        str.close();
        int j = -1, numLinha = 0;
        try {
            Scanner scanner = new Scanner(inputFile);
            while (scanner.hasNextLine()) {
                String linha = scanner.nextLine();
                j++;
                String[] palavras = linha.split(" ");
                for (int i = 0; i < palavras.length; i++) {
                    if (palavras[i].equals(palavra)) {
                        numLinha = j;
                        System.out.println(" A palavra " + palavra + " aparece na linha " + numLinha);
                    }
                }
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return;
    }
}

e tive o erro "java.io.FileNotFoundException: ..\Metal Contra as Nuvens.txt (O sistema não pode encontrar o arquivo especificado)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
        at java.base/java.util.Scanner.<init>(Scanner.java:641)
        at Brian.Main.main(Main.java:24) "

em algum lugar a partir da linha 23.

35 minutos atrás, Brian Nicolas disse:
Scanner scanner = new Scanner(inputFile);

fiz um debug e o erro tá nessa linha

 

Postado

Sobre a exceção ArrayIndexOutOfBoundsException, ela é lançada quando se tenta acessar uma posição inexistente no vetor. No seu caso, na primeira implementação você está tentando acessar a posição -1.

 

Sua primeira implementação está gerando um resultado errado, mesmo corrigindo o problema da exceção mencionada.

 

A segunda implementação aparentemente está funcionando conforme o esperado.

 

Obs.: Não é uma boa ideia fechar coisas que você não abriu. Em ambas implementações você fecha o scanner que está usando o System.in. Isso pode acarretar em problemas no futuro se você tentar usar esse stream novamente. A JVM abriu esse stream, então deixe para ela a responsabilidade de fechar.

 

Sobre a exceção FileNotFoundException, essa exceção é lançada quando se tenta acessar um arquivo que não existe, ou que não foi apontado corretamente, em ambas as situações o arquivo não será encontrado e por isso a exceção será lançada.

 

A forma ideal de apontar um arquivo, é usando o caminho absoluto. Usar um caminho relativo pode funcionar, ou não, dependendo de como se está executando o programa. É complicado de explicar, mas tem a ver com o Working directory, que executando dentro do IDE terá um valor, mas se executar pela linha de comando, terá outro.

 

O código abaixo mostra suas duas implementações, e usa o caminho relativo para acessar o arquivo. Para funcionar corretamente, o arquivo deve estar dentro do mesmo pacote que a classe. Aproveite também para comparar os resultados de ambas as implementações.

 

package cdh.pesquisador;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {

    private static String nomePacote = Main.class.getPackage().getName().replace('.', '/');
    private static String nomeArquivo;

    public static void main(String[] args) {
        nomeArquivo = "src/" + nomePacote + "/";

        for (int i = 0; i < args.length; i++) {
            nomeArquivo += args[i];

            if (i + 1 < args.length) nomeArquivo += " ";
        }

        System.out.println("Implementação 1");
        implementacao1();

        System.out.println("\n\n\n");

        System.out.println("Implementação 2");
        implementacao2();
    }

    private static void implementacao1() {
        File    inputFile = new File(nomeArquivo);
        Scanner str       = new Scanner(System.in);

        System.out.println(" Digite a palavra a ser buscada:");
        String palavra = str.nextLine();

        // Não pode fechar esse Scanner ou vai fechar um stream padrão do sistema
//        str.close();

        try {
            Scanner scanner = new Scanner(inputFile);

            while (scanner.hasNextLine()) {
                String   linha    = scanner.nextLine();
                String[] palavras = linha.split(" ");

                // Não existe posição -1
                for (int i = 0; i < palavras.length; i++) {
                    if (palavras[i].equals(palavra)) {
                        System.out.println(" A palavra " + palavra + " aparece na linha " + i);
                    }
                }
            }

            scanner.close();
            System.out.print("");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    private static void implementacao2() {
        File inputFile = new File(nomeArquivo);
        System.out.println(inputFile);
        Scanner str = new Scanner(System.in);

        System.out.println(" Digite a palavra a ser buscada:");
        String palavra = str.nextLine();

        // Não pode fechar esse Scanner ou vai fechar um stream padrão do sistema
//        str.close();

        int j = -1, numLinha = 0;

        try {
            Scanner scanner = new Scanner(inputFile);

            while (scanner.hasNextLine()) {
                String linha = scanner.nextLine();
                j++;
                String[] palavras = linha.split(" ");

                for (int i = 0; i < palavras.length; i++) {
                    if (palavras[i].equals(palavra)) {
                        numLinha = j;
                        System.out.println(" A palavra " + palavra + " aparece na linha " + numLinha);
                    }
                }
            }

            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...