我正在使用一个非常大的文本文件(755Mb).我需要对行(约1890000)进行排序,然后将它们写回另一个文件中.
我已经注意到有一个起始文件的讨论与我的相似: 排序行根据其中的单词作为键
问题是我无法将行存储在内存中的集合中,因为我得到了Java堆空间异常(即使我最大限度地扩展它)..(已经尝试过!)
我不能用excel打开它并使用排序功能,因为文件太大而且无法完全加载..
我想过使用DB ..但是我认为编写所有行然后使用SELECT查询它在执行时间方面太长了......我错了吗?
任何提示赞赏提前谢谢
有没有办法在sftp中使用"get"命令获取文件夹而不获取"无法下载非常规文件:..../dir_name"或获取文件并使用其他名称保存?
在第二个选项中我的意思是:
sftp> ls
hello.txt
sftp> get hello.txt (+ something) byebye.txt
sftp> exit
Run Code Online (Sandbox Code Playgroud)
在我的目录中我有byebye.txt.
我有一个编写excel文件的程序.它使用Apache POI编写excel 2007文件(我有超过256个colums,所以我必须使用它).该计划有效.我已经在非常小的文件上测试了它,但是如果我使用更多的行,它会耗尽内存.
这是堆栈跟踪:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.io.ByteArrayOutputStream.write(Unknown Source)
at org.apache.poi.openxml4j.opc.internal.MemoryPackagePartOutputStream.write(MemoryPackagePartOutputStream.java:88)
at org.apache.xmlbeans.impl.store.Cursor._save(Cursor.java:590)
at org.apache.xmlbeans.impl.store.Cursor.save(Cursor.java:2544)
at org.apache.xmlbeans.impl.values.XmlObjectBase.save(XmlObjectBase.java:212)
at org.apache.poi.xssf.usermodel.XSSFSheet.write(XSSFSheet.java:2480)
at org.apache.poi.xssf.usermodel.XSSFSheet.commit(XSSFSheet.java:2439)
at org.apache.poi.POIXMLDocumentPart.onSave(POIXMLDocumentPart.java:196)
at org.apache.poi.POIXMLDocumentPart.onSave(POIXMLDocumentPart.java:200)
at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:204)
at model.Conversione.traduzioneFile(Conversione.java:219)
at model.Main.scriviFile(Main.java:75)
at model.Main.main(Main.java:51)
Run Code Online (Sandbox Code Playgroud)
在我写"workbook.write(fileOut)"的行发生错误(根据堆栈跟踪),其中fileOut是FileOutputStream.这意味着所有java对象显然有足够的内存来存储excel文件,但出于某种原因,因为它写入硬盘它必须占用更多的内存.
只是告诉你,我试图将java堆大小增加到1 gig(通过添加-Xms128m -Xmx1024m),但是仍然没有做到tric.
救命!吴
代码示例:
..
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//I'M USING A DATABASE
import DAO.EventoDAO;
import DAO.ParametroDAO;
public class Conversion {
public static void traduzioneFile(File read, File write){
FileOutputStream fos=null;
try { …Run Code Online (Sandbox Code Playgroud) 我有一个JTextArea包装在一个JScrollPane中,我用它来记录我的应用程序的输出.当应用程序生成许多行时,文本区域中的行数增长非常快,并且滚动几乎不可见.我想要一个像Eclipse控制台一样的文本区域.我的意思是......带有垂直滚动的文本区域但是当使用滚动时我最多只能显示200行.
这是我正在使用的可运行代码:
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.text.DefaultCaret;
public class WindowLog extends JFrame {;
private JPanel contentPane;
private static JTextArea textArea = new JTextArea();
public static void run() {
try {
WindowLog frame = new WindowLog();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeText(JTextArea ta, String s){
DefaultCaret caret = (DefaultCaret)ta.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
ta.append(s);
}
/**
* Create the panel.
*/
public WindowLog() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, …Run Code Online (Sandbox Code Playgroud) java ×3
apache-poi ×1
command ×1
excel ×1
jscrollpane ×1
jtextarea ×1
lines ×1
linux ×1
memory ×1
rename ×1
rows ×1
sftp ×1
sorting ×1
swing ×1
text-files ×1