2013-05-23 5 views
0

Хорошо, ребята, в первую очередь, позвольте мне сказать, что я НОВИК, когда дело доходит до программирования в JAVA. Я учил себя, поэтому, сказав это, пожалуйста, несите меня, поскольку я делаю все возможное, чем могу. С учетом сказанного, вот моя дилемма !!!прочитайте из файла, разделите строку и сохраните в массиве JAVA

У меня есть файл «Users.csv», в котором хранятся поля имени пользователя и пароля.

username,password 
josh,123456ABC 
bman,turtlestew123 
etc... 

То, что я пытаюсь сделать, это ...

  1. Прочитайте строки из этого документа (users.csv) (который находится в том же каталоге, что и файл класса)
  2. Разделить линии, используя .split (","); на входе
  3. магазин расколоть 1 в массиве [0] и разделить 2 в том же массиве [1]

Массив должен быть в состоянии расти, как добавить пользователей в файл. В конце концов, я хочу проверить информацию из массива, но сейчас моя главная проблема заключается в том, как даже получить информацию в массиве. Вот то, что я играю с, но я не знаю, как сделать это делать то, что я хочу ...

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class BufferedReaderExample { 

    public static void main(String[] args) { 

     try (BufferedReader br = new BufferedReader(new FileReader("Users.csv"))) 
     { 

      String sCurrentLine; 
      String first = "Username is: "; 
      String second = "Password is: "; 

      while ((sCurrentLine = br.readLine()) != null) { 


       String[] information = sCurrentLine.split(","); 
       String username = information[0]; 
       String password = information[1]; 
       System.out.println(username); 
       System.out.println(password); 
      } 

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

    } 
} 

Этот код будет читать строки, и разделить их и вывести их на экран ... но он не хранит их в массиве, поэтому я не могу использовать массив для поиска определенных элементов.

Это для входа в систему gui. простое имя пользователя и пароль. Когда человек нажимает кнопку входа в систему, я хочу, чтобы она вытащила информацию из файла, проверила имя пользователя и проверила их пароль. Опять же эта часть представляет собой большую картину, но просто хочет сообщить вам, для чего она используется.

Кроме того, помните, что я очень неопытный, и если вы отправляете код, пожалуйста, не используйте что-то подобное, но другое, поскольку это только меня смущает.

ответ

1

Обычно люди используют ArrayList для этого, как и для массива. Массив, требующий знания общего количества элементов, в то время как аррайалист использует массив под ним и при необходимости динамически изменяет размеры (хорошо, создает больший массив и копирует данные).

Для конкретного случая, вы на самом деле хотите HashMap, который принимает key и value.

import java.io.BufferedReader; 
    import java.io.FileReader; 
    import java.io.IOException; 
    import java.util.ArrayList; 
    import java.util.List; 

public class BufferedReaderExample { 

public static void main(String[] args) { 



      try (BufferedReader br = new BufferedReader(new FileReader("Users.csv"))) 
      { 

       String sCurrentLine; 
       String first = "Username is: "; 
       String second = "Password is: "; 
       java.util.HashMap<String,String> data = new java.util.HashMap<String,String>(); 


       while ((sCurrentLine = br.readLine()) != null) {  
        String[] information = sCurrentLine.split(","); 
        String username = information[0]; 
        String password = information[1]; 
        System.out.println(username); 
        System.out.println(password); 
        data.put(username,password); 
        } 

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

     } 
    } 

Когда приходит Логин, вы используете data.get(username);, чтобы получить сохраненный пароль, и сравнить с тем, что пользователь дал.

0

Объявить свой массив за пределами заявления попробовать/поймать:

String[] information; 
    try (BufferedReader br = new BufferedReader(new FileReader("Users.csv"))) 
    { 

     String sCurrentLine; 
     String first = "Username is: "; 
     String second = "Password is: "; 

     while ((sCurrentLine = br.readLine()) != null) { 


      information = sCurrentLine.split(","); 
      String username = information[0]; 
      String password = information[1]; 
      System.out.println(username); 
      System.out.println(password); 
     } 

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

Тогда вы будете иметь возможность использовать данные, полученные в других местах.

0

Если вы хотите автоинкрементный массив, используйте ArrayList. Это специальные структуры данных, которые увеличиваются по мере добавления элементов к ним.

Я бы порекомендовал вам создать UserPOJO class, потому что завтра, если еще одно свойство добавляется к строкам CSV, он может быть принят, добавив еще одно поле в поле ниже класса

class User { 

    private String userName; 
    private String password; 
    //getter :setters 

} 

и использовать ArrayList при разборе файла

List<User> userList = new ArrayList<User>(); 
try (BufferedReader br = new BufferedReader(new FileReader("Users.csv"))) 
     { 

      String sCurrentLine; 
      String first = "Username is: "; 
      String second = "Password is: "; 

      while ((sCurrentLine = br.readLine()) != null) { 


       String[] information = sCurrentLine.split(","); 
       String username = information[0]; 
       String password = information[1]; 

       User u = new User(); 
       u.setUserName(username); 
       u.setPassword(password); 
       userList.add(u); 
      } 

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

ТАКЖЕ: Сохранение пароля пользователя в файле CSV представляет собой угрозу безопасности. Попробуйте использовать базу данных и хранить зашифрованные пароли вместо фактического пароля (при получении только расшифровки пароля и сравнения)

3

Я думаю, что ваш массив не растет, потому что вы повторно объявляете для каждой строки вашего файла (она находится в цикле while). Чтобы исправить это, вы можете инициализировать свой массив перед циклом и использовать System.arraycopy, чтобы заставить его расти.

Часть из этого быстро исправить, существует целый ряд проблем, с вашей идеей, на мой взгляд:

  • логины и пароли не должны храниться в файле CSV, а в базе данных
  • паролей должно быть хэшированными и никогда не будет виден в ясно из самого приложения
  • Баз данные должны быть подсоленной
  • массив не правильная структура данных для представления пар ключей значения - вы должны использовать карту для этого
  • В этом случае получение всех имен пользователей/паролей в памяти для сравнения их с логином пользователя не является разумным. Вы должны хэш-файл, предоставленный пользователем, найти имя пользователя в базе данных и сравнить два хэша

Я немного упрощаю здесь, есть тонны литературы об этом.

Удачи!

Смежные вопросы