1
    private Map<String, String> readFile(String file) throws IOException{
        FileReader fr = null;
        Map<String, String> m = new HashMap<String, String>();
        try {
        fr = new FileReader(file); 
        BufferedReader br = new BufferedReader(fr);

        String s = br.readLine();
        String[] split = s.split(";");
        for (int j = 0; j < split.length; j++ ) { //Just a temporary solution.
            m.put(split[j], split[(j+=1)]); //inserts username and password from file
        } 
        br.close();
        }
        catch (FileNotFoundException e){
            System.out.format("%s not found.%n", file);
            System.exit(1);
        }
        fr.close();

        return m;
    }

ファイル入力は->hahaha; パスワード; 区切り文字を使用して、行を「hahaha」と「password」の2つのトークンに分割しました。私の質問は、.txtファイルにさらに行がある場合、ユーザー名とパスワードをHashMapにマップし、パスワードがユーザー名に対応するようにする方法です。

4

4 に答える 4

0

あなたはこれを試すことができます:

BufferedReader br = new BufferedReader(fr);

String s = br.readLine();
while( s != null) {
    String[] split = s.split(";");
    m.put(split[0], split[1]);
    s = br.readLine();
}
br.close();

そして、ファイル操作にIOUtilsを使用することを強くお勧めします...

于 2013-01-02T15:21:08.057 に答える
0

バッファリングされたリーダーにはより多くの行があります:

while ((line = br.readLine()) != null) {
   // process the line.
}
于 2013-01-02T15:12:53.850 に答える
0

ここでループする必要があります:

while ((s = br.readLine()) != null) {
   String[] split = s.split(";");
   for (int j = 0; j < split.length; j++) { 
    m.put(split[j], split[(j += 1)]);
  }
}
于 2013-01-02T15:17:44.577 に答える
0

これのほとんどは、以前の回答によっても行われています。

LinkedHashMapを使用して、可能な限り入力順序を維持し、Reader for APIパラメーターを使用して、ファイルが不足したときにコードが重複しないようにすることをお勧めします。

また、分割で使用される正規表現は、制約がやや少なくなります(';'の周りのスペースを削除します)

public class ParseLogin {

    /**
     * Parses lines of username password pairs delimited by ';' and returns a Map
     * username->password.
     *
     * @param reader source to parse
     * @return Map of username->password pairs.
     * @throws IOException if the reader throws one while reading.
     */
    public static Map<String, String> parse(Reader reader) throws IOException {

        Map<String, String> result = new LinkedHashMap<String, String>();
        BufferedReader br = new BufferedReader(reader);
        String line;
        while (null != (line = br.readLine())) {
            String fields[] = line.split("\\s*;\\s*");
            if (fields.length > 1) {
                result.put(fields[0], fields[1]);
            } // else ignore (or throw Exception)
        }
        return result;
    }


    public static void main(String[] args) {

        try {
            Map<String, String> result = parse(new FileReader(args[0]));
        } catch (FileNotFoundException e) {
            System.out.format("%s not found.\n", args[0]);
            System.exit(1);
        } catch (IOException e) {
            System.out.format("Error while reading from %s.\n", args[0]);
            e.printStackTrace();
            System.exit(2);
        }
    }
}
于 2013-01-02T15:57:05.377 に答える