1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at com.demo.parsing.MainActivity.main(MainActivity.java:47)

Writer out = new FileWriter(new File(args[0])); (47行目)

私はJAVAが初めてです。私はこのコードを試してきましたが、これが何であるかを見つけることができませんarrayoutofboundexception。このコードでは、ローカル XML ファイルからいくつかのデータを解析し、それを新しいファイルに書き込もうとしています。ファイルは作成されますが、テキストがなく、上記の例外が発生します

package com.demo.parsing;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.LinkedList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.jsoup.Jsoup;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class MainActivity {

//private static OutputStreamWriter out;


public static void main(String[] args) throws FileNotFoundException {
    FileInputStream f0 = new FileInputStream("/home/kailash/workspace/paarsing/pustaka-feed.xml");

    try {
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

        Document feed = builder.parse(f0);

        NodeList items = feed.getElementsByTagName("item");

        List<String> urls = new LinkedList<String>();

        for (int i = 0; i < items.getLength(); i++) {
            Element item = (Element) items.item(i);
            Element description = (Element) item.getElementsByTagName(
                    "description").item(0);
            urls.addAll(getImages(builder,    description.getTextContent()));
        }

 Writer out = new FileWriter(new File(args[0]));

        for (String url : urls) {
            out.write(url + "\n");
        }

        out.close();

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

}

private static List<String> getImages(DocumentBuilder builder, String content) throws SAXException, IOException {
    List<String> urls = new LinkedList<String>();

    for (org.jsoup.nodes.Element img :   Jsoup.parse(content).getElementsByTag("img")) {
        urls.add(img.attributes().get("src"));
    }

    return urls;
}
}
4

1 に答える 1

3

あなたが初心者であり、 ArrayIndexOutOfBoundsException が何であるかを知らないと言うように、これは将来直面する最も一般的な例外の 1 つであるため、ArrayIndexOutOfBoundsExceptionについてよく読んでください。

あなたの質問については、47行目でArrayIndexOutOfBoundsExceptionをスローしています

ご指摘の通りLine 47

    Writer out = new FileWriter(new File(args[0]));

例外トレースを注意深く参照してください

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at com.demo.parsing.MainActivity.main(MainActivity.java:47)

跡が教えてくれる

  1. 例外: ArrayIndexOutOfBoundsException
  2. この例外が発生する idex : 0
  3. 例外をスローしている行: MainActivity.java : 47 (そのため、47行目とは何かを尋ねました)

^あなたは初心者であり、この説明は近い将来に役立つ可能性があるため、上記の情報を伝えます。

それでは、あなたの声明に戻ります

Writer out = new FileWriter(new File(args[0]));

args[0]、コマンドライン引数を表します(メインメソッドの定義を参照)

アプリケーションを実行しようとしているときに、コマンドライン引数を渡していますか?

コマンドライン引数を渡すには

DOS 経由:java nameofclassfile arg1 arg2 ......

Eclipseを介して:right click java file -> run as-run configurations, in the dialog navigate to Arguments tab and enter your command line argument under the Program Arguments text Box and hit run

于 2012-11-01T06:22:12.283 に答える