Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package base.text;
  
  import java.io.Closeable;
  import java.util.List;

Read lines from a CSV formatted input stream, as defined in: http://en.wikipedia.org/wiki/Comma-separated_values
 
 public class CsvInputStream implements Closeable {
 
 	private InputStream in;
 	private int eol = 0;
 
 	public CsvInputStream(InputStream in) {
 		this. = in;
 	}

Read a row of items from a CSV file.

Returns:
An array representing a row of items, or null if end of file has been reached.
 
 	public String[] read() throws IOException {
 		StringBuffer b = new StringBuffer();
 		List<Stringitems = new LinkedList<>();
 
 		int state = 0;
 		int c = 0;
 		while(c >= 0) {
 			c = .read();
 			switch(c) {
 				case -1:
 					break;
 				case '"':
 					if(state == 0) { // Not reading anything special
 						state = 1;
 					} else if(state == 4) { // Just saw a closing quote
 						b.setLength(0);
 						b.append(items.get(items.size() - 1));
 						items.remove(items.size() - 1);
 						b.append((char)c);
 						state = 1;
 					} else if(state == 1) {
 						items.add(b.toString());
 						b.setLength(0);
 						state = 4;
 					} else {
 						b.append((char)c);
 					}
 					break;
 				case ',':
 					if(state == 4) {
 						state = 0;
 					} else if(state == 2 || state == 0) {
 						items.add(b.toString());
 						b.setLength(0);
 						state = 0;
 					} else {
 						b.append((char)c);
 					}
 					break;
 				case '\r':
 				case '\n':
 					if(state != 1 &&  == 0) {
 						 = c;
 					}
 					if(state == 4) {
 						return items.toArray(new String[]{});
 					} else if(state == 2 || state == 0) {
 						if(b.length() > 0) {
 							items.add(b.toString());
 							b.setLength(0);
 							state = 0;
 						}
 						if( == c) {
 							return items.toArray(new String[]{});
 						}
 					} else {
 						if(b.length() != 0) {
 							b.append((charc);
 						}
 					}
 					break;
 				default:
 					b.append((char)c);
 					if(state == 0 || state == 4) {
 						state = 2;
 					}
 			}
 		}
 
 		// Were we halfway through reading a token when we hit end of line?
 		if(b.length() > 0 && state != 1) {
 			items.add(b.toString());
 			return items.toArray(new String[]{});
		}
		if(items.size() > 0) {
			return items.toArray(new String[]{});
else {
			return null;
		}
	}
	public void close() throws IOException {
	}
New to GrepCode? Check out our FAQ X