2

Cookie ファイルを検索し、各ファイルを配列に保存する Java プログラムがあります。次に、これらの各ファイルで特定の文字列を検索しようとしますが、存在することがわかっているファイルを検索しようとすると、Java はそれらが存在しないことを示します。何か案は?

これまでの私のコードは次のとおりです。

   import java.io.*;
   import java.util.*;

   public class CheckCookie 
   {
      static String[] textFiles = new String[100];
        static String userName = "";

      public static void findCookies()
      {

         String path = "pathtocookies"; 

         String files;
         File folder = new File(path);
         File[] listOfFiles = folder.listFiles(); 

         for (int i = 0; i < listOfFiles.length; i++) 
         {

            if (listOfFiles[i].isFile()) 
            {
               files = listOfFiles[i].getName();
               if (files.endsWith(".txt") || files.endsWith(".TXT"))
               {
                  textFiles[i] = files;
               }
            }
         }
      }

      public static boolean searchCookies()
      {
         for(int j = 0; j < textFiles.length; j++) {
                String path2 = "pathtocookies"+textFiles[j];
            File file = new File(path2);

            try {
               Scanner scan = new Scanner(file);
               while (scan.hasNext()) {
                  String line = scan.nextLine();
                  if(line.contains("ineligible_age")) { 
                            System.out.println("A cookie for ineligible age was set.");             
                            return true;
                  }
               }

            } 
               catch(FileNotFoundException e) { 
               System.out.println("File was not found.");
                    return false;
               }
         }
            System.out.println("A cookie for ineligible age was not set.");
         return false;
      }

      public static void main(String[] args) 
      {
         findCookies();
            searchCookies();
            System.out.println();
            System.out.println("Finished searching for cookies. Yum.");
      }

   }

実際のパス:

C:/Users/lucas.brandt/AppData/Roaming/Microsoft/Windows/Cookies
4

4 に答える 4

4

配列の代わりにリストを使用して、textFiles を格納します。

2 つのファイルを含むディレクトリを想像してください。1 つ目は「abc.doc」、2 つ目は「itsme.txt」です。

textFiles 配列は次のようになります。

  • textFiles[0]: null
  • textFiles[1]: "itsme.txt"

したがって、失敗する「pathtocookies」+「null」にアクセスしようとすると、キャッチに移動して関数から戻ります。

さらなるヒント:

  • 最初の関数からリストを返し、それを 2 番目の関数の引数として使用します
  • デバッガーまたは「デバッグ」印刷ステートメントを使用してコードをデバッグし、何が起こっているかを確認します

より多くのヒントは、実際のユース ケースによって異なります。

--tb

于 2012-10-25T15:26:19.970 に答える
3

この行で:

String path2 = "pathtocookies"+textFiles[j];

ディレクトリ名とファイル名の間にファイル区切り文字がありません。java.io.File には、親パスとファイル名を個別の引数として受け取るコンストラクターがあります。それを使用するか、File.separator を挿入できます。

String path2 = "pathtocookies" + File.separator + textFiles[j];

また、アレイ内のディレクトリも選択しています。スキャンする前に、ファイルであることを確認してください。

また、ファイルがリストに保存され、ディレクトリが削除される別の回答を検討してください。

于 2012-10-25T15:13:26.103 に答える
0
  files = listOfFiles[i].getName();

に変更してみてください

files = listOfFiles[i].getAbsolutePath();

EDIT
ファイルの配列 (文字列ではなく) を直接開始することもできます。メソッドを
使用.canRead()してファイル アクセスを確認する必要があります。

于 2012-10-25T15:19:46.610 に答える
0

FileインスタンスをFile[]またはに格納しないのはなぜList<File>ですか?

多くの文字列連結を行うときに、StringBuilderを使用することもメリットがあると思います...

于 2012-10-25T15:37:30.077 に答える