From 552885dbd3a05672b2f347b15307d4a902a0086a Mon Sep 17 00:00:00 2001 From: Braden Shepherdson Date: Wed, 2 Jan 2013 15:34:39 -0800 Subject: [PATCH] Add support for reading slices of text files. --- .../src/org/apache/cordova/FileUtils.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/framework/src/org/apache/cordova/FileUtils.java b/framework/src/org/apache/cordova/FileUtils.java index 8aff2629..be5224e3 100755 --- a/framework/src/org/apache/cordova/FileUtils.java +++ b/framework/src/org/apache/cordova/FileUtils.java @@ -112,7 +112,16 @@ public class FileUtils extends CordovaPlugin { callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, b)); } else if (action.equals("readAsText")) { - String s = this.readAsText(args.getString(0), args.getString(1)); + int start = 0; + int end = Integer.MAX_VALUE; + if (args.length() >= 3) { + start = args.getInt(2); + } + if (args.length() >= 4) { + end = args.getInt(3); + } + + String s = this.readAsText(args.getString(0), args.getString(1), start, end); callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, s)); } else if (action.equals("readAsDataURL")) { @@ -932,17 +941,27 @@ public class FileUtils extends CordovaPlugin { * @param filename The name of the file. * @param encoding The encoding to return contents as. Typical value is UTF-8. * (see http://www.iana.org/assignments/character-sets) + * @param start Start position in the file. + * @param end End position to stop at (exclusive). * @return Contents of file. * @throws FileNotFoundException, IOException */ - public String readAsText(String filename, String encoding) throws FileNotFoundException, IOException { + public String readAsText(String filename, String encoding, int start, int end) throws FileNotFoundException, IOException { + int diff = end - start; byte[] bytes = new byte[1000]; BufferedInputStream bis = new BufferedInputStream(getPathFromUri(filename), 1024); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int numRead = 0; - while ((numRead = bis.read(bytes, 0, 1000)) >= 0) { + + if (start > 0) { + bis.skip(start); + } + + while ( diff > 0 && (numRead = bis.read(bytes, 0, Math.min(1000, diff))) >= 0) { + diff -= numRead; bos.write(bytes, 0, numRead); } + return new String(bos.toByteArray(), encoding); }