java应用问答

问: 如何获得某一个目录下的文件列表?

答:以“c:/Windows/.”目录为例,获得该目录下文件列表的代码为:


File MyDir = new File(C:/Windows/.); 
String[] FileNames=MyDir.list();





问:利用如下代码拷贝中文文件,为什么出错?


int c; 
while ((c = MyFileReader.read()) != -1) 
MyFileOutputStream.write(c);



答:利用如下代码片断拷贝中文文件不会出错:


int c; 
while ((c = MyFileReader.read()) != -1) 
MyFileWriter.write(c);



原代码造成出错的原因是:FileReader.read()返回一个int型数值,其取值范围是0 65535,通常来说是两个字节的。FileWriter.write(int c)向文件写入一个int型,通常来说也是两个字节的。如果某个字符的高位字节为空,那么其高位字节将被舍弃。FileOutputStream.write(int b)虽然接受一个int型作为参数,实际上只向文件写入一个字节,如果传递过来的参数是一个双字节的汉字,其高位字节将被舍弃,造成文件内容错误。建议:只使用InputStream/OutputStream进行I/O操作。代码为:


int c; 
while((c =MyFileInputStream.
read())!=-1) 
MyFileOutputStream.write(c);





问:如何利用文件进行数据存取?

答:对于一般的科学计算应用程序,DataInputStreamDataOutputStream类通常是最好的选择。这两个类提供了存取各种数据的方法。下面的范例演示了构造DataInputStreamDataOutputStream的方法:


MyDataInputStream = new DataInputStream( 
new FileInputStream(MyInputFile)); 
MyDataOutputStream = new DataOutputStream( 
new FileOutputStream(MyOutputFile));



利用ObjectInputStreamObjectOutputStream同样可以进行数据存取。需要注意的是这样做增加了硬盘的开销,因为进行对象序列化过程添加了一些额外的信息。在利用ObjectInputStreamObjectOutputStream进行通信的时候,虽然数据发收过程得到了大大简化,但是对带宽的要求也大大地提高了。



问:如何获得可用的硬盘空间?

答:目前没有更好的纯Java解决方案,但有一个JConfig的类库提供了一些方法可以获得磁盘和文件信息,这个类库使用了JNI 方法。它的下载地址:http://www.tolstoy.com/samizdat/jconfig.html。值得注意的是,如果使用的是Windows系列操作系统,那么下面的方法在英文版的Windows系统上基本都能够得到正确的结果,但在中文版的Windows系统上基本都不能够获得正确的结果。


1.String osname= System.
getProperty(os.name); 
2.String command =“”; 
3.if (osname.indexOf(NT) >-1) 
4.command =c://winnt//
System32//cmd.exe; 
5.else if (osname.indexOf(Windows) > -1) 
6.command =c://windows//
command.com; 
7.Process p = Runtime.get-
Runtime().exec( 
8.command +/c dir > c://dir
.txt); 
9.p.waitFor();



然后需要做的是对得到的dir.txt文件进行分析。

如果使用的是Uinx/Linux操作系统,可以使用类似的方法来获得相关信息。不过建议上述代码行8处使用的命令改为df -k >dir.txt



问:如何显示和存储拉丁语言中的特殊字符?

答:使用统 一码 Unicode可以显示和存储拉丁语言中的特殊字符。具体应用范例如下:


MyJTextArea.append(/u00E
        
        
         
         1
         
         
        
        ); 
MyJTextArea.append(/u00E
        
        
         
         2
         
         
        
        ); 
MyJTextArea.append(/u00E
        
        
         
         3
         
         
        
        ); 
MyJTextArea.append(/u00E
        
        
         
         4
         
         
        
        ); 
MyJTextArea.append(/u00E
        
        
         
         5
         
         
        
        ); 
MyFileOutputStream.write(MyJTextArea.getText().getBytes(UTF
        
        
         
         -8
         
         
        
        )); 
MyFileOutputStream.close();



同样,在读取文件的时候也需要将读到的内容转换成统 一码 。


byte[] b = new byte[MyFile.length()]; 
FileInputStream in = new FileInputStream(MyFile); 
in.read(b); 
MyJTextArea.append(new String(b,UTF
        
        
         
         -8
         
         
        
        ));





问:用Java怎么知道究竟有几个可用的存储设备?

答:在Windows系统中可以有多个逻辑分区,可应用下面的方法找出来:


public void ListDisks() 
{ 
 File[] roots = File.listRoots(); 
 for (int i=0; i
 { 
  System.out.println(roots[i]); 
 } 
)





问:如何解决用JDBC向数据库中插入数据的中文问题?

答:这个问题的实现通常与各个JDBC Driver的实现有关。目前大多数JDBC Driver采用本地编码格式来传输中文字符,例如中文字符“0x 4175 会被转成“0x 41 和“0x 75 进行传输。因此我们需要对JDBC Driver返回的字符及要发给JDBC Driver的字符进行转换。

当用JDBC Driver向数据库中插入数据时,需要先将Unicode转成Native Code;当 JDBC Driver从数据库中查询数据时,则需要将Native Code转换成Unicode 下面给出了这两种转换的实现:


String native2Unicode(String s) 
{
 if (s == null || s.length() == 0) 
 {
  return null;
 }
 byte[] buffer = new byte[s.length()];
 for (int i = 0; i s.length(); i++) { 
  if (s.charAt(i)>= 0x100) {
   c = s.charAt(i);
   byte []buf = (“”+c).getBytes();
   buffer[j++] = (char)buf[0];
   buffer[j++] = (char)buf[1];
  }
  else {
   buffer[j++] = s.charAt(i);
  }
 }
 return new String(buffer, 0, j);
}



有些JDBC Driver如果对jdbc driver Manager设置了正确的字符集属性,以上2个方法就不需要了。



问:我要做一个站点,让互联网用户可以了解查询我们公司的商品,我可以使用XML作为后台的Web数据库吗?

答:XML的确与数据库有相似之处,比如说它们都具有数据存储、数据有效性验证、数据查询、数据访问编程接口等特征。但是还有许多实际数据库所具备的功能是XML所不具备的,如:索引、安全机制、事务机制、数据完整性、多用户访问、触发器、多文档查询等。在实际应用中,对于一些数据量小、访问用户少、性能要求不高的门户站点而言,将XML文档直接作为数据库使用是可能的。然而对于商业应用而言,后台还是应选择专门的数据库。如果访问数量较大的话,还可以考虑在数据库与应用服务器之间采用XML作为信息缓存。但是数据库中对应数据的更新应是定期的,这样才能保证XML文件缓存中的数据在其生存期内与数据库中对应数据相一致。



问:XML-DataSchema有什么区别?

答:XML-DataSchema的区别是细微的。通常将对数据的某种约束规则统一称之为Schema,即模式。这种称法在数据库中广泛使用并被XML所沿袭。从这一角度而言,DTDXML-Data都可算是用于XML的某种Schema,凡是符合Schema约束的XML文档我们称之为有效的XML。为了区别起见,可以将XML-Data称之为XML-Data SchemaXML-Data Schema最早由微软提出,并于19981月被W 3C 接受成为“建议”(Note)。随后,在1999W 3C XML-Data的基础上发布了“XML Schema工作草案”,这也就是通常所说的XML SchemaXML Schema 2001 5 2 正式发布为W 3C 标准。作为XML-Data的创建者,微软公司在XML Schema V1.0尚未正式出炉前就已经在他的MSXML解析器、IE浏览器、Biztalk Server 2000中提供了对XML-Data的广泛支持(事实上它们支持的是XML-Data的一个子集)。鉴于它与XML Schema的血缘关系,我们通常也称其为Schema,即MS Schema。基于XML-Data及其扩展的Schema有一共同特点,即Schema自身也都是标准的XML文档。这与传统的DTD规范是截然不同的。这也是我们通常将XML约束简单划分为DTDSchema的主要依据。需要指出的是,在IEMSXML等工具中所支持的MS Schema与目前W 3C 正式发布的XML Schema并不完全兼容。也就是说,在Biztalk Server 2000中建立的XSD文件未必会符合标准的XML Schema规范。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Lucene 是一个开源的全文检索引擎,可以用来构建高效的搜索应用程序。在 Java 中使用 Lucene 构建问答引擎可以实现以下功能: 1. 对问题进行分词和索引,以便快速定位相关答案。 2. 对答案进行分词和索引,并使用相关性算法来计算答案与问题的相似度。 3. 提供自然语言查询接口,让用户可以输入问题并获取相关答案。 4. 支持多种数据源,如数据库、文件等。 下面是一个简单的 Lucene 问答引擎示例: 1. 首先需要创建一个问答索引,包括问题、答案和其他相关信息: ```java public class QaIndexer { private Directory directory; private Analyzer analyzer; private IndexWriterConfig config; private IndexWriter writer; public QaIndexer(Path indexPath) throws IOException { directory = FSDirectory.open(indexPath); analyzer = new StandardAnalyzer(); config = new IndexWriterConfig(analyzer); writer = new IndexWriter(directory, config); } public void indexQuestion(String question, String answer, String category) throws IOException { Document doc = new Document(); doc.add(new TextField("question", question, Field.Store.YES)); doc.add(new TextField("answer", answer, Field.Store.YES)); doc.add(new StringField("category", category, Field.Store.YES)); writer.addDocument(doc); } public void commit() throws IOException { writer.commit(); } public void close() throws IOException { writer.close(); directory.close(); } } ``` 2. 然后创建一个搜索器,用于搜索问题并返回相关答案: ```java public class QaSearcher { private Directory directory; private IndexReader reader; private IndexSearcher searcher; public QaSearcher(Path indexPath) throws IOException { directory = FSDirectory.open(indexPath); reader = DirectoryReader.open(directory); searcher = new IndexSearcher(reader); } public List<String> search(String query, int numHits) throws IOException { QueryParser parser = new QueryParser("question", new StandardAnalyzer()); Query q = parser.parse(query); TopDocs docs = searcher.search(q, numHits); List<String> results = new ArrayList<>(); for (ScoreDoc scoreDoc : docs.scoreDocs) { Document doc = searcher.doc(scoreDoc.doc); String answer = doc.get("answer"); results.add(answer); } return results; } public void close() throws IOException { reader.close(); directory.close(); } } ``` 3. 最后,将索引和搜索器结合起来,实现一个简单的问答引擎: ```java public class QaEngine { private QaIndexer indexer; private QaSearcher searcher; public QaEngine(Path indexPath) throws IOException { indexer = new QaIndexer(indexPath); searcher = new QaSearcher(indexPath); } public void indexQuestion(String question, String answer, String category) throws IOException { indexer.indexQuestion(question, answer, category); } public List<String> search(String query, int numHits) throws IOException { return searcher.search(query, numHits); } public void commit() throws IOException { indexer.commit(); } public void close() throws IOException { indexer.close(); searcher.close(); } } ``` 这个问答引擎可以用来回答用户输入的问题,例如: ```java QaEngine engine = new QaEngine(Paths.get("index")); engine.indexQuestion("What is Lucene?", "Lucene is a full-text search engine library written in Java", "technology"); engine.commit(); List<String> results = engine.search("What is Lucene?", 10); for (String result : results) { System.out.println(result); } engine.close(); ``` 输出: ``` Lucene is a full-text search engine library written in Java ``` ### 回答2: Java Lucene问答引擎是一个使用Java编写的,基于Lucene搜索引擎的问答系统案例。该系统旨在通过自动化处理问题和提供相关答案来帮助用户解决问题。 该问答引擎案例的实现过程如下: 1. 数据收集:首先,系统需要收集大量的问题和答案数据。可以从已有的问答社区、论坛或其他数据源中获取问题和对应的答案。 2. 数据预处理:收集到数据后,需要对其进行预处理。这包括文本清洗、分词和词干提取等处理,以便为后续的检索和匹配做准备。 3. 索引构建:使用Lucene的倒排索引技术,将问题和答案数据构建成一个索引库。这将提高后续的搜索效率。 4. 问题解析:当用户提出一个问题时,系统需要对该问题进行解析,以确定用户的意图和需要的答案类型。这可以通过自然语言处理技术,如词性标注、依存句法分析等来实现。 5. 答案检索:通过用户提出的问题,使用索引库进行问题匹配和检索,找出与问题最相关的答案。这可以使用Lucene提供的查询和检索功能来实现。 6. 答案排序:根据答案的相关性和质量,对检索到的答案进行排序,并选择最佳的答案作为结果返回给用户。排序可以使用相关性算法,如TF-IDF、BM25等来实现。 7. 用户界面:为用户提供一个友好的界面,让用户输入问题并显示搜索结果。这可以通过Web界面或命令行界面来实现。 通过以上步骤,Java Lucene问答引擎可以实现自动化的问题回答功能。用户可以输入问题,系统可以自动解析用户意图并给出相关答案。这在知识库问答、智能客服、语义搜索等领域都有广泛的应用前景。 ### 回答3: Java Lucene问答引擎是一个基于Java语言和Lucene搜索引擎的案例,旨在提供用户使用自然语言进行询问并获得准确答案的功能。 该问答引擎的实现过程主要包括以下几个步骤: 1. 数据准备:首先,需要准备一个问题和答案的数据集,一般可以使用已有的知识库或者文档集合,将其进行预处理和索引构建,以便于快速检索。 2. 分析和预处理:使用Lucene的分词器对问题和答案进行分词处理,并进行相关的预处理操作,如去除停用词、词干化等,以便于能够更好地匹配和搜索。 3. 构建索引:使用Lucene的索引功能,将预处理后的问题和答案构建成索引结构,以便于后续的查询和匹配操作。 4. 用户查询:用户通过输入自然语言的问题,问答引擎将对其进行分析、预处理,并根据索引结构进行查询。 5. 匹配和排序:根据用户查询的关键词和索引中的问题进行匹配,使用相应的算法对匹配结果进行排序,以便于展示最为相关和准确的答案。 6. 结果展示:将排序后的答案进行展示,并提供相应的界面和交互形式,以便于用户能够直观地获得问题的答案。 Java Lucene问答引擎案例的实现可以帮助用户更方便地获取问题的答案,尤其在一些知识库比较庞大和复杂的情况下,能够大大提高问题解答的效率和准确性。同时,可以根据具体的需求和业务场景对该引擎进行定制和扩展,以适应不同的功能和应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值