2012-04-15 10 views
1

私はAndroidでtuPrologをテストしています。私はプロローグコードと相互作用するActivity TuProlog、クラスParserとプロローグコードを含むdata.plを持っています。コンソールに出力されたJavaプロジェクトとしてはうまく動くことができますが、私はAndroidプロジェクトとしてそのように対処しています。 Androidの場合、私のファイルdata.plはプロジェクトのルート、srcの中、私のパッケージの中にコピーされていますが、FileNotFoundExceptionを取得します。結果を文字列として取得し、TextViewに結果を表示したいだけです。ここに私のコードはAndroidでプロローグを実行中

public class TuProlog extends Activity implements OnClickListener{ 

TextView tv; 
Button b1; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView)findViewById(R.id.label); 
    b1 = (Button)findViewById(R.id.button1); 
    b1.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    Parser custom = new Parser(); 
    String result = custom.parse(); 
    tv.setText(result); 
} 
} 


public class Parser { 

Prolog engine; 
PrintStream orgStream = System.out; 

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PrintStream psout = new PrintStream(baos, Boolean.TRUE); // Using autoFlush 
String myResult ; 

public String parse() 
{ 
    engine = new Prolog(); 
    try{ 
     Theory t = new Theory(new FileInputStream("data.pl")); 
     try{ 
      engine.setTheory(t); 
      try{ 
       SolveInfo answer = engine.solve("likes(john,X)."); 
       try{ 
        Term derivative = answer.getTerm("X"); 
        return myResult;; 
       } 
       catch (NoSolutionException e){ 
        e.printStackTrace(); 
       } 
       catch (UnknownVarException e){ 
        e.printStackTrace(); 
       } 
      } 
      catch (MalformedGoalException e){ 
       e.printStackTrace(); 
      } 
     } 
     catch (InvalidTheoryException e){ 
      e.printStackTrace(); 
     } 
    } 
    catch (FileNotFoundException e){ 
     e.printStackTrace(); 
    } 
    catch (IOException e){ 
     e.printStackTrace(); 
    } 
    return null; 
} 
    @Override 
public void onSpy(SpyEvent e) { 
    // TODO Auto-generated method stub 
    Log.d("TAG", "** LG'd onSpy => SpyEvent Occured ** "); 
    System.out.println("** onSpy => SpyEvent Occured ** \n "); 
    myResult = e.getMsg(); 
} 


@Override 
public void onOutput(OutputEvent e) { 
    // TODO Auto-generated method stub 
    Log.d("TAG", "** LG'd: onOutput => OutputEvent Occured ** "); 
     System.out.println("** onOutput => OutputEvent Occured ** \n "); 
     myResult = e.getMsg(); 

} 


@Override 
public void onWarning(WarningEvent e) { 
    // TODO Auto-generated method stub 
    Log.d("TAG", "** LG'd: onWarning => WarningEvent Occured ** "); 
    System.out.println("** onWarning => WarningEvent Occured ** \n "); 
    myResult = e.getMsg(); 
} 
} 

Data.pl

ある
likes(john,mary). 
likes(mary,wine). 

ここに私のlogcat出力は、私がSystem.errの

04-15 18:51:25.480: W/System.err(23813): java.io.FileNotFoundException: /data.pl (No such file or directory) 
04-15 18:51:25.484: W/System.err(23813): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
04-15 18:51:25.484: W/System.err(23813): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232) 
04-15 18:51:25.484: W/System.err(23813): at java.io.FileInputStream.<init>(FileInputStream.java:80) 
04-15 18:51:25.484: W/System.err(23813): at java.io.FileInputStream.<init>(FileInputStream.java:132) 
04-15 18:51:25.484: W/System.err(23813): at com.tuprolog.alicia.Parser.parse(Parser.java:32) 
04-15 18:51:25.484: W/System.err(23813): at com.tuprolog.alicia.TuProlog.onClick(TuProlog.java:51) 
04-15 18:51:25.484: W/System.err(23813): at android.view.View.performClick(View.java:2485) 
04-15 18:51:25.484: W/System.err(23813): at android.view.View$PerformClick.run(View.java:9080) 
04-15 18:51:25.484: W/System.err(23813): at android.os.Handler.handleCallback(Handler.java:587) 

答えて

1

私はこれまでにやったことがありますし、(非常にベータな概念証明のみの)尋問用のソースコードを掲載しています、plsは以下を参照してください。

Eclipse(Helios)プロジェクトのソースコードをダウンロードするには、goto:versaggi.biz、ダウンロードAdrea、TuProlog Dev Project、Eclipse(Helios)Javaソースプロジェクト、最後にTuProlog Android Eclipse Porject Sourceをダウンロードします。それはあなたを始めるはずです。これはコンセプトコードの証明であり、最終版がリリースされる前に完全に書き直されることに注意してください。それを考えれば、私がやったことをどうやってやったのか、いくつかの洞察を得るのに十分にうまくいきます。援助をしたいのであれば、直接私に連絡してください。私は一緒にお手伝いしてうれしいです。 :-) Eclipseで

+0

おかげ@ProfVersaggi – Yogesh

1

I get FileNotFoundException even though my file data.pl is copied in root of project

しかし、エラーを見て知っているいけない、次のとおりです。

java.io.FileNotFoundException: /data.pl (No such file or directory)

ファイルシステムのルートからdata.plを読み込もうとしています!

FileInputStream(File)コンストラクタを使用して、パスをより詳細に制御できます。アプリケーションのディレクトリを取得する方法については、例えばthisの質問をご覧ください。

1
  1. は、このフォルダにPLファイルを移動し
  2. プロジェクト
  3. の解像度フォルダ内のフォルダ "plFiles" を作成(例:RES/plFiles/data.pl)
  4. 上記の行は、入力ストリームを返す(現在の活動である)

    InputStream in = a.getResources().openRawResource(R.plFiles.data); 
    
  5. 使用してこのファイルにアクセスするアクティビティを使用します。 Scanner、BufferedReader、または任意のリーダークラスを使用して、ファイルの解析や読み取りを続けることができます。

ここで言及されたファイルにアクセスする別の方法... Access resource files in Android

関連する問題