2016-04-07 6 views
0

CSV-Datei Inhalt von Box-java-sdk lesen Hallo ich bin mit [box] [1]Wie in chunks

[1]: https://www.box.com/ meine CSV-Datei zu speichern. Die Größe der Datei beträgt 2 GB. Jetzt möchte ich jeden Datensatz der Datei verarbeiten und einige Operationen basierend auf dem Dateiinhalt ausführen.

, was ich tat:

public class BoxConnector { 

public static void main(String[] args) throws IOException { 

    BoxAPIConnection api = new BoxAPIConnection("My access token"); 

    BoxFolder rootFolder = BoxFolder.getRootFolder(api); 
    for (BoxItem.Info itemInfo : rootFolder) { 
     System.out.format("[%s] %s\n", itemInfo.getID(), itemInfo.getName()); 
     BoxFile file = new BoxFile(api, itemInfo.getID()); 
     BoxFile.Info info = file.getInfo(); 
     try { 
      System.out.println(info.getSize()); 

      File tmpFile = File.createTempFile("file", "temp"); 
      FileOutputStream fsTmpStrem = new FileOutputStream(tmpFile); 
      long blockSize = 1000; 
      long roundChunks = info.getSize()/blockSize; 
      long startByteRange = 0; 
      long endByteRange = blockSize; 
      for (long start = 0; start < roundChunks; start++) { 

       file.downloadRange(fsTmpStrem, startByteRange, endByteRange); 
       processFile(tmpFile); 
       startByteRange = endByteRange; 
       endByteRange = endByteRange + blockSize; 
      } 
      //last download block 
      file.downloadRange(fsTmpStrem, blockSize * roundChunks, info.getSize()); 
      processFile(tmpFile); 

     } finally { 

     } 
    } 
} 

private static void processFile(File tmpFile) throws IOException { 

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(tmpFile))); 
    String line = null; 
    while ((line = br.readLine()) != null) { 
     System.out.println("Process line record"); 
    } 
    br.close(); 
    //after each process lets delete the temp file 
    tmpFile.delete(); 

} 

}

mit diesem Ich kann den Dateinamen bekommen, die ich zu box.com hochgeladen haben. Jetzt möchte ich jeden Datensatz lesen und verarbeiten. Allerdings brauche ich eine API, die mir den Dateizugriff erlaubt.

mit diesen Dateien werden heruntergeladen, wie pro Stück von Anfang und Ende Bytebereich Flag definiert.wie auch immer aufgrund von Chunk herunterladen ich einige Datensätze gebrochen bin. i Bedeutung nicht immer bin komplette Linie unten sagen ist mein Zeuge

16F11C78-D004-4600-8D28-445C087D2A7D 
31C99F3D-D4C7-418A-9ACC-D9A382BCD53A 
30C1AA92-B5B7-4ABF-A631-A8C150D90C4F 
D9FC1DBF-B309-4BB1-8955-D9F48F643E97 

ich bin immer

16F11C78-D004-4600-8D28-445C087D2A7D 
    31C99F3D-D4C7-418A-9ACC-D9A382BCD53A 
    30C1AA92-B5B7-4ABF-A631-A8C150D90C4F 
    D9FC1DBF- 

i.e. B309-4BB1-8955-D9F48F643E97 Teil von den letzten Zeile fehlt. Wie soll ich das mit Download-API verwalten?

Antwort

0

Dies ist derzeit mit der Box API nicht möglich. Sie können nur eine ganze Datei herunterladen.

+0

Ja kann ich auf outputstream herunterladen. Ich habe Range Download wie oben hinzugefügt. Hier aufgrund der Bereichsdefinition für Start- und Endbytes. Einige Datensätze werden teilweise heruntergeladen. Wie können wir das überwinden? Vielen Dank – Sam

Verwandte Themen