2014-02-20 2 views
1

Я написал 3 текстовых файла, содержащих 3 столбца, Latitude, Longitude and Device_ID. Каждый файл имеет от 50 до 100 различных координат долготы/широты и между 2/4 device_id. Я написал код, который читает из этих txt-файлов и печатает их на экране. Мой следующий шаг - включить эту информацию в ArrayList. Я собираюсь получить 3 ArrayLists для каждого текстового файла, так что это будет всего 9 ArrayLists. Я понятия не имею, как создать ArrayList, который будет принимать данные?Как создать ArrayList из входящих данных из текстового файла

Вот что я сделал до сих пор;

public static void main (String args []) throws FileNotFoundException 
{  
    File textA = new File("C:/Users/Daniel Dold/Desktop/Routes/RoutesA.txt"); 
    File textB = new File("C:/Users/Daniel Dold/Desktop/Routes/RoutesB.txt"); 
    File textC = new File("C:/Users/Daniel Dold/Desktop/Routes/RoutesC.txt"); 
    Scanner scannerA = new Scanner(textA); 
    Scanner scannerB = new Scanner(textB); 
    Scanner scannerC = new Scanner(textC); 
    int lineNumber = 1; 
    while(scannerA.hasNextLine()) 
    { 
     String line = scannerA.nextLine(); 
     System.out.println(line); 
     lineNumber ++; 
    } 
    System.out.println(); 
    while(scannerB.hasNextLine()) 
    { 
     String line = scannerB.nextLine(); 
     System.out.println(line); 
     lineNumber ++; 
    } 
    System.out.println(); 
    while(scannerC.hasNextLine()) 
    { 
     String line = scannerC.nextLine(); 
     System.out.println(line); 
     lineNumber ++; 
    } 
} 

Отпечатанный результат;

51.51092066  -0.14513969  430 
51.51073703  -0.14553129  431 
51.51059347  -0.14583707 
51.51047662  -0.1461026 
51.51049331  -0.14613747 
51.51048997  -0.14616698 
51.51040651  -0.14641106 
51.51035643  -0.14649421 
51.51032972  -0.14652103 
51.51027296  -0.14666057 
51.51022789  -0.1467517 
51.51021286  -0.14695287 
51.51020285  -0.14709234 
51.51021119  -0.14715671 
51.51039983  -0.14728009 
51.51031302  -0.14770388 
51.51023081  -0.14809616 
51.51037396  -0.14816656 
51.51053838  -0.1482477 
51.51074914  -0.14835298 
51.51081507  -0.14799356 
51.51090271  -0.14752015 
51.51114643  -0.14763012 
51.5114227  -0.14775619 
51.51160215  -0.14783665 
51.51171149  -0.147264 
51.51179829  -0.14679461 
51.51195938  -0.14597654 
51.51213215  -0.14510482 
51.51223063  -0.14473334 
51.5123045  -0.14447115 
51.51207831  -0.14425389 
51.51192098  -0.14410034 
51.51178786  -0.14396623 
51.51166058  -0.14383413 
51.51149532  -0.14366381 
51.51131795  -0.14348007 
51.51114768  -0.14330506 
51.51108133  -0.1434841 
51.5109987  -0.1436866 
51.51094236  -0.14381736 
51.51105087  -0.1439441 
51.51122406  -0.14414862 
51.51129876  -0.14423512 
51.51131169  -0.14427468 
51.51130418  -0.14431558 
51.51123699  -0.14445908 
51.51112348  -0.14470249 
51.5109649  -0.14504045 

51.49647926  -0.11145785  428 
51.49666837  -0.11155306  435 
51.49686708  -0.11165432  440 
51.49705494  -0.11173612 
51.498177  -0.11215657 
51.49827719  -0.1121968 
51.49853767  -0.11243283 
51.49874472  -0.11250794 
51.49888665  -0.11248111 
51.4992348  -0.11213779 
51.50008135  -0.11133045 
51.50027253  -0.11114135 
51.50053885  -0.11094555 
51.50085609  -0.11072829 
51.50109735  -0.11061162 
51.50132443  -0.11054724 
51.50160827  -0.11052578 
51.50174435  -0.11048287 
51.50185371  -0.11040777 
51.50200899  -0.1102294 
51.50218096  -0.10991424 
51.50235043  -0.10951861 
51.50261506  -0.10873407 
51.50284881  -0.10804206 
51.50305  -0.10740772 
51.5030717  -0.10729775 
51.50320527  -0.10689139 
51.50337306  -0.10640725 
51.50340813  -0.10628253 
51.5036018  -0.10536924 
51.50370698  -0.10499373 
51.50376291  -0.10474026 
51.50376583  -0.1047121 
51.50376333  -0.10467119 
51.50374663  -0.10458469 
51.50356298  -0.10458737 
51.50334635  -0.10459274 
51.50260672  -0.1046209 
51.50251572  -0.10461688 
51.5022227  -0.10462761 
51.50189796  -0.10459676 
51.50175353  -0.10461554 
51.50147553  -0.10466248 
51.50095627  -0.10468527 
51.50058977  -0.10469064 
51.50039943  -0.10467589 
51.49902858  -0.10473221 
51.49892088  -0.10472685 
51.49889751  -0.10462694 
51.49886954  -0.10456122 
51.49879106  -0.104466 
51.49874013  -0.10444119 
51.49870966  -0.10443449 
51.49867877  -0.10443248 
51.49864788  -0.10443717 
51.49861782  -0.10445192 
51.49858443  -0.1044546 
51.49855813  -0.10444656 
51.49849468  -0.10441303 
51.49834857  -0.10431379 
51.49777667  -0.10360837 
51.49697099  -0.1026012 
51.49614942  -0.10152295 
51.49600498  -0.10134056 
51.49571442  -0.10100528 
51.49571192  -0.10099657 
51.49568228  -0.10096103 
51.49566558  -0.10092817 
51.49565264  -0.10086916 
51.49564554  -0.10079071 
51.49563218  -0.10049432 
51.49561089  -0.10034613 
51.49555286  -0.10014765 
51.49548231  -0.10003634 
51.49514625  -0.09992704 
51.49508363  -0.09991228 
51.49504981  -0.09991631 
51.49502184  -0.09993039 
51.49499345  -0.0999619 
51.49478471  -0.10047689 
51.49477303  -0.10056406 
51.49477219  -0.10061905 
51.49478388  -0.10070353 
51.4949851  -0.10117158 
51.49527733  -0.10182738 
51.49543013  -0.1023075 
51.4955967  -0.10293178 
51.49573446  -0.10340653 
51.49591857  -0.104006 
51.49614024  -0.10471612 
51.49636358  -0.10537728 
51.49647588  -0.10570653 
51.49655102  -0.10591037 
51.49680818  -0.10646425 
51.49703527  -0.10692827 
51.49718389  -0.10722331 
51.49724567  -0.10737888 
51.49729159  -0.10750428 
51.4973254  -0.10765247 
51.49733  -0.1077155 
51.49732749  -0.10775842 
51.49733167  -0.10782949 
51.49720894  -0.10850273 
51.49714715  -0.10867305 
51.49685827  -0.10986529 
51.49652681  -0.11124663 

51.50177649  -0.05012445  426 
51.50210374  -0.05050666  429 
51.50253617  -0.0509908  436 
51.50265346  -0.05072191  443 
51.50274404  -0.05055025 
51.50301702  -0.05011841 
51.503242  -0.04975095 
51.50362768  -0.04908308 
51.50409182  -0.04814565 
51.50424291  -0.04773125 
51.50437147  -0.0473316 
51.50446955  -0.04699029 
51.50449084  -0.04689507 
51.50460103  -0.04640624 
51.50465362  -0.04618093 
51.50527135  -0.04514828 
51.50535983  -0.04511878 
51.50566035  -0.04506781 
51.50588239  -0.04475668 
51.50633816  -0.04415586 
51.50670044  -0.04277721 
51.50676471  -0.04252575 
51.50684818  -0.04212744 
51.50690328  -0.04173316 
51.50692748  -0.04136502 
51.50694835  -0.04037864 
51.50692999  -0.03981739 
51.50689117  -0.0390315 
51.50687072  -0.03860503 
51.50672631  -0.03755696 
51.50658149  -0.03651693 
51.50652598  -0.03614276 
51.5064279  -0.03572434 
51.50622631  -0.03506183 
51.50616495  -0.03487475 
51.50611278  -0.03475807 
51.50605226  -0.03466084 
51.50579474  -0.03435977 
51.50577554  -0.03434367 
51.50566744  -0.03427662 
51.50522293  -0.03414184 
51.50495664  -0.03413178 
51.50471706  -0.0341586 
51.50449835  -0.03419347 
51.50445328  -0.03420688 
51.5042354  -0.03416396 
51.50346907  -0.03374956 
51.50327456  -0.03367446 
51.50285382  -0.03346659 
51.5025416  -0.03336198 
51.50246897  -0.03333516 
51.50195556  -0.03335796 
51.50168591  -0.03337539 
51.50139205  -0.03335528 
51.50094458  -0.03334991 
51.50028338  -0.03336332 
51.50020991  -0.03338881 
51.50017068  -0.0334277 
51.50013812  -0.0335028 
51.50008886  -0.03416665 
51.49998951  -0.03468163 
51.49991688  -0.03483452 
51.49985343  -0.03489755 
51.49964805  -0.03499008 
51.49957459  -0.03506921 
51.49964638  -0.03540851 
51.49998617  -0.03537096 
51.50039024  -0.03537498 
51.50086777  -0.03544472 
51.50147887  -0.03558017 
51.5024314  -0.03577597 
51.50331964  -0.03588326 
51.50394907  -0.03604553 
51.50432973  -0.03622524 
51.50455846  -0.03638886 
51.50489153  -0.03672547 
51.50502426  -0.0369253 
51.50520874  -0.03726594 
51.505359  -0.03759987 
51.50554014  -0.03820471 
51.50564031  -0.0388243 
51.5056712  -0.03928296 
51.50566953  -0.0402271 
51.50564616  -0.04049934 
51.50559357  -0.04134424 
51.50553847  -0.04186727 
51.50532978  -0.04298575 
51.50514947  -0.04372202 
51.50479303  -0.04486061 
51.50411185  -0.04632242 
51.50325285  -0.04770778 
51.50260672  -0.04881553 
51.50207577  -0.04964702 
51.50185037  -0.04999302 

Это, вероятно, простой вопрос для многих людей там, но если вы можете помочь мне в любом и.т.д быть большим, веселит

+0

Что будет хранить три архивариуса для файла? – Adarsh

+0

Нет, потому что этот вопрос связан с созданием и добавлением элементов вручную. Я хочу создать 3 ArrayLists, по 1 для каждого столбца и для этого, чтобы эти данные были добавлены по мере того, как они поступают в – Dan

+0

@Adarsh. Три arraylists будут содержать одну колонку результатов, напечатанных ,SO arraylist 1 будет хранить все данные слева, в то время как arraylist 2 будет хранить все данные в среднем столбце, а arraylist 3 хранит все данные в правом столбце – Dan

ответ

2

ХОРОШО Господь СТОП

Если вы дойдете до точки, где вы управляете 9 бесконтрольного ArrayList объекты для чего-то же просто, как чтение из файла, то вы пошло не так в вашем дизайн. Вы хотите 3 ArrayList s за файл? Нет, давайте возьмем Объектно-ориентированный подход.

Пример

public class Position 
{ 
    private String longitude; 
    private String latitude; 
    private String id; 

    public Position(String longitude, String latitude, String id) { 
     this.longitude = longitude; 
     this.latitude = latitude; 
     this.id = id; 
    } 
} 

И когда вы читаете ваши ценности, создать ArrayList типа Position, и заполнить его.

String longitude, latitude, id; 
List<Position> positions = new ArrayList<Position>(); 
// Grab those values from their files 

positions.add(new Position(logitude, latitude, id)); 

Теперь у вас есть более управляемые, но до сих пор улучшаемые, 3 ArrayList объектов; по одному на файл.

+0

Я не уверен, что устройство - это правильный объект для модели - возможно, позиция? Поскольку каждая позиция может иметь на ней несколько устройств. Конечно, это зависит от использования этой информации. – selig

+0

Согласен. Я больше пытаюсь передать концепцию, что подход ООП решит это, но я изменю имя объекта. – christopher

+0

Ха, я думал, что это было очень много. В основном, что я хотел сделать, это заставить deviceId путешествовать по этим координатам, отсюда их разделение на разных аррайалистов. Но с помощью вашего метода я могу вызвать deviceId, чтобы следовать последовательности конкретных координат? – Dan

0

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

Что-то вроде этого:

ArrayList<String> arrayList = new ArrayList<String>(); 

Затем добавить что-то в ArrayList, вы должны использовать add метод.

while(scannerA.hasNextLine()) 
{ 
    String line = scannerA.nextLine(); 
    arrayList.add(line); 
    System.out.println(line); 
    lineNumber ++; 
} 

Прочитав комментарии, я понимаю, что вы хотите использовать 3 разных ArrayList. Код тот же, просто добавьте 3 ArrayList. И в цикле while вы должны использовать одно время arrayList1, второй цикл arrayList2 и т. Д.

Я использовал String, потому что вы используете его в своем коде, вы должны его изменить, если вам нужен другой тип.

0

Ваш список идентификаторов должен быть списком списков, так как вы можете иметь более одного идентификатора.

Таким образом, для каждого файла будет иметь

List<Integer> LongList = new ArrayList<>; 
List<Integer> LatList = new ArrayList<>; 
List<List<Integer>> IdList = new ArrayList<>; 

Split каждой строки на вкладке т.е.

String[] parts = line.split(\t); 

Затем добавьте каждую часть вправо, т.е. 'ArrayList'

LongList.add(Double.parseDouble(parts[0])); 
LatList.add(Double.parseDouble(parts[1])); 
List<Integer> ids = new ArrayList<>(); 
IdList.add(ids); 
for(int i =2;i<parts.length;i++) 
    ids.add(Integer.parseInt(parts[i])); 

Затем вы можете перебирать их вместе. Если у вас нет идентификаторов, у вас будет пустой список в IdList.

+0

Услышав, что его значения являются плавающей точкой. –

0

Как использовать ArrayList

объявляя ArrayList

Ваш ArrayList, скорее всего, будет заполнен двойниками.Таким образом, чтобы объявить ArrayList, что вы можете заполнить с двойниками вас, введите следующее:

ArrayList<Double> list = new ArrayList<Double>();

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

Добавление элементов администратору

Это просто.

вобще list.add(Double)

И Марко просто бить меня к нему. Я не удаляю это, поэтому я все равно опубликую его.

0

Вы хотите использовать 3 массива ArrayLists для хранения каждого из данных из строки для файла? Непонятно, зачем вы это делаете, поскольку из вашего вывода я вижу, что последний столбец может быть пустым для некоторых строк. Я предлагаю создать класс для хранения данных из строки и разбора каждой строки на новый экземпляр класса, который будет добавлен в ваш массив. Вы можете использовать Double для широты и долготы и проанализировать String перед сохранением результата в ArrayList.

public final class FileLine { 

private final String latitude; 
private final String longitude; 
private final String[] deviceID; 

public FileLine(final String latitude, final String longitude, final String[] deviceID) { 
    this.latitude = latitude; 
    this.longitude = longitude; 
    this.deviceID = deviceID; 
} 

public String getLatitude() { 
    return latitude; 
} 

public String getLongitude() { 
    return longitude; 
} 

public String[] getDeviceID() { 
    return deviceID; 
} 

}

final ArrayList<FileLine> file1Lines = new ArrayList<FileLine>(); 
    while(scannerA.hasNextLine()) 
    { 
     final String[] line = scannerA.nextLine().split(" ");       
     if (line.length > 2) { 
      file1Lines.add(new FileLine(line[0], line[1], Arrays.copyOfRange(line, 2, line.length - 1))); 
     } else if (line.length == 2) { 
      file1Lines.add(new FileLine(line[0], line[1], null)); 
     } else if (line.length == 1) { 
      file1Lines.add(new FileLine(line[0], null, null)); 
     } 
    } 
+1

Линия файла может содержать несколько идентификаторов устройства или ноль. – selig

+0

В этом случае просто измените способ хранения устройств в массиве. Также используйте Arrays.copyOfRange() для копирования всех элементов, если длина разделения больше 2 (есть хотя бы один идентификатор устройства). – Slimu

+0

Я хочу создать файл, который заставит устройства с идентификатором, указанным в правом столбце, перемещаться по этим координатам. Таким образом, самое большее у меня будет 4 устройства, движущиеся вокруг 1 набора координат. Я предполагаю, что аррайалист - это лучший способ сделать это. – Dan

0

Вы определяете список массив строк, используя следующую строку,

List<String> list = new ArrayList<String>(); 

Теперь ваша линия имеет два или три значения, разделенные пробелами. Вы можете использовать пробелы в качестве разделителей и разделить их с помощью

while(scannerA.hasNextLine()) 
    { 
    String line = scannerA.nextLine(); 
    String[] values = line.split(" ");   
    } 

И перебирать String [] для извлечения значения и добавить каждый из этих значений в трех массивах, созданных с использованием выше заданной линии.

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