package com.pritom.kumar;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/**
* Created by pritom on 10/10/2014.
*/
public class ReadCsvFile {
final static Charset ENCODING = StandardCharsets.UTF_8;
private Integer maxRowSize = 0;
List dataList = new ArrayList();
public String DELIMITER = ",";
public static void main(String[] args) throws Exception {
ReadCsvFile readCsvFile = new ReadCsvFile();
Long started = System.currentTimeMillis();
readCsvFile.run();
Long finished = System.currentTimeMillis();
Long timeTaken = finished - started;
readCsvFile.prettyPrint();
readCsvFile.println("Time Taken: " + timeTaken + " Milli Seconds.");
readCsvFile.println(readCsvFile.toHtml("csv-output.html"));
readCsvFile.println(readCsvFile.toCsv("csv-output.csv"));
System.exit(200);
}
public String toCsv(String fileName) throws Exception {
File file = new File(fileName);
List fileLines = new ArrayList();
for (Object object : dataList) {
fileLines.add(listToBuffer((List) object).toString());
}
writeStringList(fileLines, file.getAbsolutePath());
return file.getAbsolutePath();
}
private StringBuffer listToBuffer(List data) {
StringBuffer stringBuffer = new StringBuffer();
Boolean firstValue = true;
for (Object value : data) {
String line = value.toString();
if (!firstValue) {
stringBuffer.append(DELIMITER);
}
stringBuffer.append("\"");
for (Integer index = 0; index < line.length(); index++) {
char chars = line.charAt(index);
if (chars == '\"') {
stringBuffer.append("\"");
}
stringBuffer.append(chars);
}
stringBuffer.append("\"");
firstValue = false;
}
return stringBuffer;
}
public String toHtml(String fileName) throws Exception {
File file = new File(fileName);
List fileLines = new ArrayList();
for (Integer dataIndex = 0; dataIndex < dataList.size(); dataIndex++) {
List columnData = (ArrayList) dataList.get(dataIndex);
maxRowSize = columnData.size() > maxRowSize ? columnData.size() : maxRowSize;
}
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("<table>");
for (Integer dataIndex = 0; dataIndex < dataList.size(); dataIndex++) {
List columnData = (ArrayList) dataList.get(dataIndex);
stringBuffer.append("<tr><td>" + (dataIndex + 1) + "</td>");
for (Integer headerIndex = 0; headerIndex < maxRowSize; headerIndex++) {
stringBuffer.append("<td style='border: 1px solid black;'>" +(columnData.size() > headerIndex ? columnData.get(headerIndex) : "") + " </td>");
}
stringBuffer.append("</tr>\n");
if (dataIndex % 10 == 0) {
fileLines.add(stringBuffer.toString());
stringBuffer = new StringBuffer();
}
}
stringBuffer.append("</table>");
fileLines.add(stringBuffer.toString());
writeStringList(fileLines, file.getAbsolutePath());
return file.getAbsolutePath();
}
public Boolean writeStringList(List<String> aLines, String aFileName) throws IOException {
try {
Path path = Paths.get(aFileName);
Files.write(path, aLines, ENCODING);
return true;
}
catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
public void prettyPrint() {
for (Integer dataIndex = 0; dataIndex < dataList.size(); dataIndex++) {
List columnData = (ArrayList) dataList.get(dataIndex);
print((dataIndex + 1) + ": ");
for (Integer headerIndex = 0; headerIndex < columnData.size(); headerIndex++) {
print("<" + columnData.get(headerIndex) + ">");
if (headerIndex + 1 < columnData.size()) {
print(", ");
}
}
println("");
}
}
public void run() throws Exception {
String csvFile = "input.csv";
BufferedReader br = null;
FileReader fileReader = new FileReader(csvFile);
String line = "";
try {
br = new BufferedReader(fileReader);
while ((line = br.readLine()) != null) {
if (line.trim().length() > 0) {
List tempDataList = parseLine(line.trim());
maxRowSize = tempDataList.size() > maxRowSize ? tempDataList.size() : maxRowSize;
dataList.add(tempDataList);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private List parseLine(String string) throws Exception{
InputStream stream = new ByteArrayInputStream(string.getBytes("UTF-8"));
Reader fr = new InputStreamReader(stream, "UTF-8");
int chars = fr.read();
while (chars == '\r') {
chars = fr.read();
}
if (chars < 0) {
return new ArrayList();
}
List dataList = new ArrayList();
StringBuffer stringBuffer = new StringBuffer();
Boolean inQuotes = false, lineStarted = false;
while (chars > 0) {
if (inQuotes) {
lineStarted = true;
if (chars == '\"') {
inQuotes = false;
}
else {
stringBuffer.append((char) chars);
}
}
else {
if (chars == '\"') {
inQuotes = true;
if (lineStarted) {
stringBuffer.append('\"');
}
}
else if (chars == DELIMITER.charAt(0)) {
dataList.add(stringBuffer.toString());
stringBuffer = new StringBuffer();
lineStarted = false;
}
else if (chars == '\r') {
}
else if (chars == '\n') {
break;
}
else {
stringBuffer.append((char) chars);
}
}
chars = fr.read();
}
dataList.add(stringBuffer.toString());
return dataList;
}
private void print(Object object) {
System.out.print(object);
}
private void println(Object object) {
System.out.println(object);
}
}
1: <permalink>, <company>, <numEmps>, <category>, <city>, <state>, <fundedDate>, <raisedAmt>, <raisedCurrency>, <round>
2: <lifelock>, <LifeLock Limited,Company">, <>, <web>, <Tempe>, <AZ>, <1-May-07>, <6850000>, <USD>, <b>
....................
1459: <myrio>, <Myrio>, <75>, <software>, <Bothell>, <WA>, <1-Jan-01>, <20500000>, <USD>, <unattributed>
1460: <grid-networks>, <Grid Networks>, <>, <web>, <Seattle>, <WA>, <30-Oct-07>, <9500000>, <USD>, <a>
1461: <grid-networks>, <Grid Networks>, <>, <web>, <Seattle>, <WA>, <20-May-08>, <10500000>, <USD>, <b>
Time Taken: 96 Milli Seconds.
C:\codes\javap\csv-output.html
C:\codes\javap\csv-output.csv
No comments:
Post a Comment