来自csv的Java Hashmap

来自csv的Java Hashmap,java,hashmap,lookup,Java,Hashmap,Lookup,我试图在一个类中使用HAshmap,以便从其他类中查找给定产品代码的产品描述。 使用setter(填充)似乎一切都正常,但是当我尝试使用getter(getdesc)时,我得到了一个错误 我使用的csv文件只有2个文件(cod,des)。稍后,我计划从JDBCSQLServer源代码填充hashmap 我可能使用了错误的语法。如果有人能帮忙,我将不胜感激 这是我当前的课程代码: package bookRecommender; import java.io.BufferedReader; im

我试图在一个类中使用HAshmap,以便从其他类中查找给定产品代码的产品描述。 使用setter(填充)似乎一切都正常,但是当我尝试使用getter(getdesc)时,我得到了一个错误

我使用的csv文件只有2个文件(cod,des)。稍后,我计划从JDBCSQLServer源代码填充hashmap

我可能使用了错误的语法。如果有人能帮忙,我将不胜感激

这是我当前的课程代码:

package bookRecommender;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;



public class ProdutoDescricao


{

        public static void main(String[] args) {}

    @SuppressWarnings({ "resource", "unused" })
    public static void populate(String[] args) throws IOException {
        Map<String, ArrayList<String>> produtos=null;
        try { 

               String csvFile = "Data/produto_descricao.csv";


               BufferedReader br = new BufferedReader(new FileReader(csvFile));
               String line = "";
               StringTokenizer st = null;

               produtos= new HashMap<String, ArrayList<String>>();

               int lineNumber = 0; 
               int tokenNumber = 0;

                           while ((line = br.readLine()) != null) {
               lineNumber++;



                st = new StringTokenizer(line, ",");
                            while (st.hasMoreTokens()) {
                tokenNumber++;


                            String token_lhs=st.nextToken();
                            String token_rhs= st.nextToken();


                            ArrayList<String> arrVal = produtos.get(token_lhs);
                            if (arrVal == null) {
                                arrVal = new ArrayList<String>();
                                produtos.put(token_lhs,arrVal);
                            }
                            arrVal.add(token_rhs);                            

                            }
                        }

                        System.out.println("Final Hashmap is : "+produtos);




} catch (Exception e) {
               System.err.println("CSV file cannot be read : " + e);
             }

    }

  public  String getdesc (long cod)  
  {

    return produto.get(cod);
//Here is the sysntax error
  }

}
包装书籍推荐人;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.text.ParseException;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.StringTokenizer;
公共类产品描述
{
公共静态void main(字符串[]args){}
@SuppressWarnings({“资源”,“未使用的”})
公共静态void填充(字符串[]args)引发IOException{
Map produtos=null;
试试{
字符串csvFile=“Data/produto_descripcao.csv”;
BufferedReader br=新的BufferedReader(新文件读取器(csvFile));
字符串行=”;
StringTokenizer st=null;
produtos=newhashmap();
int lineNumber=0;
整数=0;
而((line=br.readLine())!=null){
lineNumber++;
st=新的StringTokenizer(行“,”);
而(st.hasMoreTokens()){
数字++;
字符串标记_lhs=st.nextToken();
字符串标记_rhs=st.nextToken();
ArrayList arrVal=produtos.get(token_lhs);
如果(arrVal==null){
arrVal=newarraylist();
产品投入(代币、到岸价);
}
arrVal.add(令牌_rhs);
}
}
System.out.println(“最终Hashmap为:“+produtos”);
}捕获(例外e){
System.err.println(“无法读取CSV文件:”+e);
}
}
公共字符串getdesc(长cod)
{
返回produto.get(cod);
//这是sysntax错误
}
}

produtos=new HashMap()
produtos
它没有值,它是空的


ArrayList arrVal=produtos.get(token_lhs)此行有问题,您必须首先在地图中添加值,然后获取这些值

您有一个具有字符串键和ArrayList值类型的映射,但您试图检索具有长键和字符串值类型的值

 public  ArrayList<String> getdesc (String cod)  
  {
    return produtos.get(cod);
  }
public ArrayList getdesc(字符串cod)
{
返回produtos.get(cod);
}
还声明字段“produtos”:

 private static Map<String, ArrayList<String>> produtos;
私有静态地图产品;

完整的类代码:

您说有错误,但您没有告诉我们错误是什么。如果你能制作一个简短但完整的程序来演示这个问题也会更好。我确信您不需要这么多代码来证明错误。(请注意,您从未声明过
produto
变量,并且您的
produto
变量是
main
中的局部变量。)最好不要输入整个执行代码,而是输入一个局部变量。请考虑更新你的代码来帮助别人帮助你。另外,不要压抑警告,修复他们所警告的东西。错误是“不能解决的”。肯定是语法错误或者类的结构不好。有什么提示吗?在getdesc方法中,hashmap似乎是空的。很抱歉,我是java新手,我的问题可能很愚蠢。我如何更改代码,使其能够与setter和getter一起工作,并可用于其他类?我更改了方法以符合您的建议,但出现了相同的错误:“产品无法解决”。链接似乎已断开。链接正常。我的防火墙阻止了该页面。我按照你的建议更改了代码,它可以编译。当我尝试在另一个类中使用此方法时,我在第二个类中使用的线程“main”java.lang.NullPointerException在bookRecommender.ProdutoDescricao.getdesc(ProdutoDescricao.java:84)在bookRecommender.teste.main(teste.java:70)中得到了一段代码:ProdutoDescricao produtos=new ProdutoDescricao();produtoDescriptio.populate(空);System.out.println(produtos.getdesc(“60597”);