Java 从CSV文件读取

Java 从CSV文件读取,java,csv,Java,Csv,上述代码用于将详细信息上载到数据库,这些信息在CSV文件中以选项卡分隔 CSV文件的示例格式如下所示,这很好: http://avb.com(制表符空间)asdf(制表符空间)asdf(制表符空间)asdd(制表符空间)asdf http://anything.com(选项卡空间)asdf(选项卡空间)asdf(选项卡空间)asdfasd(选项卡空间)asdfsadf 有时我可能需要将一些null值从CSV文件插入数据库,如下所示: http://asdf.com(选项卡空间)(选项卡空间)aa

上述代码用于将详细信息上载到数据库,这些信息在CSV文件中以选项卡分隔

CSV文件的示例格式如下所示,这很好:

http://avb.com(制表符空间)asdf(制表符空间)asdf(制表符空间)asdd(制表符空间)asdf

http://anything.com(选项卡空间)asdf(选项卡空间)asdf(选项卡空间)asdfasd(选项卡空间)asdfsadf

有时我可能需要将一些
null
值从CSV文件插入数据库,如下所示:

http://asdf.com(选项卡空间)(选项卡空间)aasddf(选项卡空间)(选项卡空间)asdfsad

但是这不起作用,没有任何东西被插入到数据库中


为了在表的第二列和第四列(
srccnt
&
verticle
)中插入
null
值,必须对上述程序进行哪些修改?

我建议您调试代码,以更具体地找出它在哪里没有按预期运行,然后在必要时,发布更具体的问题。

StringTokenizer将连续分隔符视为单个分隔符。您说输入包含[tab space]作为分隔符,但代码的其余部分似乎不需要空格,因此,如果没有更多信息,我猜输入仅用制表符(而不是[tab space])分隔,并且忽略了相邻的分隔符,然后是最后一个
nextToken()
引发您忽略的异常

这里的答案是使用
split()
,按照

StringTokenizer是一个遗留类 出于兼容性原因保留 尽管在纽约不鼓励使用它 代码。建议任何人 使用 String或 改为java.util.regex包


也就是说,您应该查看任何现有的CSV库(Google for Java CSV)。

我使用FileHelpers解析CSV文件。它读取一个csv文件并在object中给我一个输出,这就是我想要的。而且,如果我通过对象列表,它会为我创建一个csv文件。给它一个机会。

您的代码不完整。
try
语句的
catch()和/或
finally
子句在哪里?如果忽略异常,那么这就是开始的地方。。。打印堆栈跟踪。“但这不起作用。没有任何内容插入到数据库中。”。。。告诉我你得到了某种形式的错误。其次,您正在\t上标记,但在“space”(制表符空间)aasddf(制表符空间)(制表符空间)asdfsad“…”的情况下,在\t之后有一个空格。。。这将返回一个“空格”标记,对吗?如果你不想要空格,那么你应该在标记化之前去掉它们。类似strLine.replaceAll(\\w+,“”)的东西应该可以实现这一点。也可以使用split()而不是标记器。
try {
    BufferedReader br = new BufferedReader(new InputStreamReader(item.getInputStream()));
    String strLine = "";
    StringTokenizer st = null;
    while ((strLine = br.readLine()) != null) {
        st = new StringTokenizer(strLine, "\t");
        while (st.hasMoreTokens()) {
            urlcnt = st.nextToken();
            srccnt = st.nextToken();
            contentType = st.nextToken();
            verticle = st.nextToken();
            timeFrame = st.nextToken();
        }
        if (con == null) {
            SQLConnection.setURL("jdbc:sqlserver://192.168.2.53\\SQL2005;user=sa;password=365media;DatabaseName=LN_ADWEEK");
            con = SQLConnection.getNewConnection();
            stmt = con.createStatement();
        }
        try {
            ResultSet rs;
            boolean hasRows = false;
            rs = stmt.executeQuery("select url from urls_temp where url='"+urlcnt+"'");
            while (rs.next()) {
                hasRows=true;
                i++;
            }
            if (!hasRows) {
                j++;
                PreparedStatement insertUrlStatement = con.prepareStatement("INSERT INTO urls_temp(url, source_name, is_active, is_periodic, Link_Type, New_Entry, verticle, periodic_timeframe) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
                if (timeFrame.equalsIgnoreCase("Daily")) {
                    insertUrlStatement.setString(1, urlcnt);
                    insertUrlStatement.setString(2, srccnt);
                    insertUrlStatement.setInt(3, 1);
                    insertUrlStatement.setInt(4, 0);
                    insertUrlStatement.setString(5, contentType);
                    insertUrlStatement.setInt(6, 1);
                    insertUrlStatement.setString(7, verticle);
                    insertUrlStatement.setString(8, timeFrame);
                    insertUrlStatement.executeUpdate();
                    insertUrlStatement.close();
                } else {
                    insertUrlStatement.setString(1, urlcnt);
                    insertUrlStatement.setString(2, srccnt);
                    insertUrlStatement.setInt(3, 1);
                    insertUrlStatement.setInt(4, 1);
                    insertUrlStatement.setString(5, contentType);
                    insertUrlStatement.setInt(6, 1);
                    insertUrlStatement.setString(7, verticle);
                    insertUrlStatement.setString(8, timeFrame);
                    insertUrlStatement.executeUpdate();
                }
            }
        }
    }
}