|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.lib.cvsclient.file; import java.io.*; /** * @author Thomas Singer * @version Sep 26, 2001 */ public class DefaultTransmitTextFilePreprocessor implements TransmitTextFilePreprocessor { private static final int CHUNK_SIZE = 32768; private File tempDir; public void setTempDir(File tempDir) { this.tempDir = tempDir; } public File getPreprocessedTextFile(File originalTextFile) throws IOException { // must write file to temp location first because size might change // due to CR/LF changes File preprocessedTextFile = File.createTempFile("cvs", null, tempDir); // NOI18N byte[] newLine = System.getProperty("line.separator").getBytes(); boolean doConversion = newLine.length != 1 || newLine[0] != '\n'; OutputStream out = null; InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(originalTextFile)); out = new BufferedOutputStream(new FileOutputStream(preprocessedTextFile)); byte[] fileChunk = new byte[CHUNK_SIZE]; byte[] fileWriteChunk = new byte[CHUNK_SIZE]; for (int readLength = in.read(fileChunk); readLength > 0; readLength = in.read(fileChunk)) { if (doConversion) { int writeLength = 0; for (int i = 0; i < readLength; ) { int pos = findIndexOf(fileChunk, newLine, i); if (pos >= i && pos < readLength) { System.arraycopy(fileChunk, i, fileWriteChunk, writeLength, pos - i); writeLength += pos - i; i = pos + newLine.length; fileWriteChunk[writeLength++] = '\n'; } else { System.arraycopy(fileChunk, i, fileWriteChunk, writeLength, readLength - i); writeLength += readLength - i; i = readLength; } } out.write(fileWriteChunk, 0, writeLength); } else { out.write(fileChunk, 0, readLength); } } return preprocessedTextFile; } catch (IOException ex) { if (preprocessedTextFile != null) { cleanup(preprocessedTextFile); } throw ex; } finally { if (in != null) { try { in.close(); } catch (IOException ex) { // ignore } } if (out != null) { try { out.close(); } catch (IOException ex) { // ignore } } } } private static int findIndexOf(byte[] array, byte[] pattern, int start) { int subPosition = 0; for (int i = start; i < array.length; i++) { if (array[i] == pattern[subPosition]) { if (++subPosition == pattern.length) { return i - subPosition + 1; } } else { subPosition = 0; } } return -1; } public void cleanup(File preprocessedTextFile) { if (preprocessedTextFile != null) { preprocessedTextFile.delete(); } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.