Go语言文件操作本文主要介绍了Go语言中文件读写的相关操作 。
文件是什么?
计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件 。
os.Open() 函数能够打开一个文件,返回一个 *File 和一个 err。对得到的文件实例调用 close() 方法能够关闭文件 。
为了防止文件忘记关闭 , 我们通常使用defer注册文件关闭语句 。
Read方法定义如下:
它接收一个字节切片 , 返回读取的字节数和可能的具体错误,读到文件末尾时会返回 0 和 io.EOF。举个例子:
使用for循环读取文件中的所有数据 。
bufio是在file的基础上封装了一层API , 支持更多的功能 。
io/ioutil 包的 ReadFile 方法能够读取完整的文件,只需要将文件名作为参数传入 。
os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能 。
其中:
name :要打开的文件名flag :打开文件的模式 。模式有以下几种:
perm :文件权限,一个八进制数 。r(读)04,w(写)02,x(执行)01 。
go 程序生成 coredump 文件如果需要针对当前用户一直生效go语言生成文档,那么需要在~/.bash_profile追加go语言生成文档:
如果需要针对所有用户生效go语言生成文档,那么需要在/etc/profile追加go语言生成文档:
然后再对应执行 source ~/.bash_profile或者source /etc/profile
测试go语言生成文档:
编译运行 , 然后键盘敲 Ctrl\,会发现当前目录生成了core文件 。
在/proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置和文件名 。
比如: core-%e-%p-%t表示在当前目录生成 "core-命令-pid-时间戳" 为文件名的core文件
比如: /cfg/core-%e-%p-%t表示在/cfg下生成 "core-命令-pid-时间戳" 为文件名的core文件
注意: /proc/sys/kernel/core_pattern不能直接编辑,可以用echo core-%e-%p-%t/proc/sys/kernel/core_pattern
如何配置go语言开发环境1、下载go的zip文件 。并且一定要把文件解压到c:\go目录下 。
2、配置windows的高级环境变量 。包括:GOROOT、GOOS、GOBIN、GOARCH 。并且在path变量里面把c:\go\bin加入 。以便可以在命令行直接运行go命令 。
举例:我的机器:
GOPATH= c:\go;c:\go\src;F:\workspace\goSample01;
GOBIN=c:\go\bin;F:\workspace\goSample01\bin;
其中,c:\go是go的安装路径;
F:\workspace\goSample01是我写的go语言项目的工程目录;
F:\workspace\goSample01\bin是go语言项目的工程目录下的可执行文件路径;
3、在完成环境变量配置后,打开一个命令行窗口,直接输入go,然后回车 , 看看是否出现go的帮助信息 。如果出现,那么go的基本环境就OK了 。
注意:这个基本环境不包含开发工具,也不能直接编译带C代码的go程序 。
4、(可选)为了支持Import远程包,最好装个gomingw 。下载地址: 。如果下的是压缩包,请把它解压到C盘 。例如 , C:\gowin-env 。里面有个Console.bat是以后使用go get的环境 。举例:有个文件a.go,里面import(
"fmt"
"github.com/astaxie/beedb"
_ "github.com/ziutek/mymysql/godrv"
为了编译该a.go文件,需要启动Console.bat,然后在该命令行窗口 , 进入c:\go\src目录下,执行go getgithub.com/astaxie/beedb
Go get github.com/ziutek/mymysql/godrv .
Go会自动下载该远程包并编译和安装这些包 。
配置goclipse(可?。?
(如果不喜欢eclipse开发工具,请跳过这个配置 。)
1、下载并安装goclipse插件 。Goclipse是go语言for eclipse的插件,下载地址:
2、启动eclipse并创建go项目 。然后写个最简单的helloworld.go文件,并运行 。代码如下:
packagemainimport"fmt"func main(){fmt.Printf("hello, world")}
配置gocode(可?。?
如果不需要go语法辅助和eclipse里面的(按ALT /)弹出go语言自动辅助功能,请跳过这个配置 。
1、下载gocode的zip文件,解压后放在go的bin目录下 。
2、下载并安装Git软件 。并且在path里面配置git的执行路径 。例如c:\git\bin
3、在命令行执行:go build .\gocode 。如果一切正常,那么将会编译生成一个gocode.exe文件在go的bin目录下 。如果编译失败,那么就转第4步 。
4、如果第3步直接编译gocode源文件成功,那就直接到第5步 。否则,就需要通过git下载gocode源文件,然后再编译 。在命令行执行:go get -u github.com/nsf/gocode。就会生成gocode.exe文件 。
5、在goclipse插件里面指定gocode的路径 。就可以在elcipse里面调用gocode来帮助写编码了 。
从开发工具这块看,go语言还不够成熟,开发工具都还不完善,有待改进 。
下载go-tour教程源代码(可?。?
Google有个在线运行go语言的教程(),很不错 。支持在web上直接运行大部分的go程序,想了解这个教程的源代码的朋友可以通过以下方式获取 。如果没兴趣,可以跳过这个步骤 。
golang 环境build之后可执行文件为什么没有在bin生成golang 环境build之后可执行文件为什么没有在bin生成
bin目录下存放go语言生成文档的是项目调试之后的可运行文件 。
在bin下有两个文件夹go语言生成文档,一个是Debuggo语言生成文档,另一个是Release,都是自动生成的 , 是看启动调试时选择哪个就生成哪个文件夹,Release比Debug小,但是这两个文件夹下存放的东西都是一样的,当你调试项目的时候,在Debug文件夹下会生成 项目名称.exe、项目名称.pdb、项目名称.vshost.exe,双击.exe就能运行你的项目 。
在此文件夹下除了这些,还有一些项目的依赖项,比如 *.dll等,有的需要你自己添加到Debug文件夹下的,比如 *.ini , *.rpt等 。
Go语言编译成aar并调试 go及gomobile的环境配置这里就不介绍了,直接说aar的生成和使用 。
1. 设置环境变量GOPATH
GOPATH的值可以有多个,用半角分号间隔,但不能以其结束,设置完成后需要重新做 gomobile init。
2. 在GOPATH里创建src文件夹,用于存放go的包和源文件
3. 在src中创建hello文件夹(go文件的包名)
4. 在hello中创建hello.go文件,并输入内容
5. 编译
执行命令: gomobile bind -target=android hello
会生成一个hello.aar文件
6. 导入到android工程
将hello.aar文件放入工程的libs中 , 并配置build.gradle
在根结点加入:
在dependencies结点下加入依赖:
7. 在Java中测试
运行后,结果会输出 Hello, Android and Gopher
golang怎么通过数据流直接生成excel上传至ossimport java.io.*; import jxl.*; … … … … try { //构建Workbook对象, 只读Workbook对象 //直接从本地文件创建Workbook //从输入流创建Workbook InputStream is = new FileInputStream(sourcefile); jxl.Workbook rwb = Workbook.getWorkbook(is); } catch (Exception e) { e.printStackTrace(); } 一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表) 。参考下面的代码片段: //获取第一张Sheet表 Sheet rs = rwb.getSheet(0); 我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它 。如果通过下标来访问的话,要注意的一点是下标从0开始 , 就像数组一样 。一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格) 。参考下面的代码片段: //获取第一行,第一列的值 Cell c00 = rs.getCell(0, 0); String strc00 = c00.getContents(); //获取第一行,第二列的值 Cell c10 = rs.getCell(1, 0); String strc10 = c10.getContents(); //获取第二行 , 第二列的值 Cell c11 = rs.getCell(1, 1); String strc11 = c11.getContents(); System.out.println("Cell(0, 0)"" value : "strc00"; type : "c00.getType()); System.out.println("Cell(1, 0)"" value : "strc10"; type : "c10.getType()); System.out.println("Cell(1, 1)"" value : "strc11"; type : "c11.getType()); 如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回 。示例代码中Cell(0, 0)是文本型 , Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents() , 三种类型的返回值都是字符型 。如果有需要知道Cell内容的确切类型,API也提供了一系列的方法 。参考下面的代码片段: String strc00 = null; double strc10 = 0.00; Date strc11 = null; Cell c00 = rs.getCell(0, 0); Cell c10 = rs.getCell(1, 0); Cell c11 = rs.getCell(1, 1); if(c00.getType() == CellType.LABEL) { LabelCell labelc00 = (LabelCell)c00; strc00 = labelc00.getString(); } if(c10.getType() == CellType.NUMBER) { NmberCell numc10 = (NumberCell)c10; strc10 = numc10.getValue(); } if(c11.getType() == CellType.DATE) { DateCell datec11 = (DateCell)c11; strc11 = datec11.getDate(); } System.out.println("Cell(0, 0)"" value : "strc00"; type : "c00.getType()); System.out.println("Cell(1, 0)"" value : "strc10"; type : "c10.getType()); System.out.println("Cell(1, 1)"" value : "strc11"; type : "c11.getType()); 在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型 , 最后调用相应的取值方法getXXX(),就可以得到确定类型的值 。API提供了以下基本类型,与Excel的数据格式相对应,如下图所示: 每种类型的具体意义,请参见Java Excel API Document 。当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要 。参考如下代码片段: //操作完成时 , 关闭对象,释放占用的内存空间 rwb.close(); Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API Document 。? Workbook类提供的方法 1. int getNumberOfSheets() 获得工作?。╓orkbook)中工作表(Sheet)的个数,示例: jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); int sheets = rwb.getNumberOfSheets(); 2. Sheet[] getSheets() 返回工作?。╓orkbook)中工作表(Sheet)对象数组,示例: jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); Sheet[] sheets = rwb.getSheets(); 3. String getVersion() 返回正在使用的API的版本号 , 好像是没什么太大的作用 。jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); String apiVersion = rwb.getVersion(); ? Sheet接口提供的方法 1. String getName() 获取Sheet的名称,示例: jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); jxl.Sheet rs = rwb.getSheet(0); String sheetName = rs.getName(); 2. int getColumns() 获取Sheet表中所包含的总列数,示例: jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); jxl.Sheet rs = rwb.getSheet(0); int rsColumns = rs.getColumns(); 3. Cell[] getColumn(int column) 获取某一列的所有单元格 , 返回的是单元格对象数组,示例: jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); jxl.Sheet rs = rwb.getSheet(0); Cell[] cell = rs.getColumn(0); 4. int getRows() 获取Sheet表中所包含的总行数,示例: jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); jxl.Sheet rs = rwb.getSheet(0); int rsRows = rs.getRows(); 5. Cell[] getRow(int row) 获取某一行的所有单元格 , 返回的是单元格对象数组,示例子: jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); jxl.Sheet rs = rwb.getSheet(0); Cell[] cell = rs.getRow(0); 6. Cell getCell(int column, int row) 获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同 。jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile)); jxl.Sheet rs = rwb.getSheet(0); Cell cell = rs.getCell(0, 0); 生成新的Excel工作薄 下面的代码主要是向大家介绍如何生成简单的Excel工作表,在这里单元格的内容是不带任何修饰的(如:字体 , 颜色等等),所有的内容都作为字符串写入 。(完整代码见ExcelWriting.java) 与读取Excel工作表相似 , 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象,这里要注意的是,只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,因为类WritableWorkbook的构造函数为protected类型 。示例代码片段如下: import java.io.*; import jxl.*; import jxl.write.*; … … … … try { //构建Workbook对象, 只读Workbook对象 //Method 1:创建可写入的Excel工作薄 jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile)); //Method 2:将WritableWorkbook直接写入到输出流 /* OutputStream os = new FileOutputStream(targetfile); jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os); */ } catch (Exception e) { e.printStackTrace(); } API提供了两种方式来处理可写入的输出流 , 一种是直接生成本地文件 , 如果文件名不带全路径的话,缺省的文件会定位在当前目录,如果文件名带有全路径的话,则生成的Excel文件则会定位在相应的目录;另外一种是将Excel对象直接写入到输出流,例如:用户通过浏览器来访问Web服务器,如果HTTP头设置正确的话,浏览器自动调用客户端的Excel应用程序,来显示动态生成的Excel电子表格 。接下来就是要创建工作表 , 创建工作表的方法与创建工作薄的方法几乎一样 , 同样是通过工厂模式方法获得相应的对象,该方法需要两个参数 , 一个是工作表的名称,另一个是工作表在工作薄中的位置,参考下面的代码片段: //创建Excel工作表 jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0); "这锅也支好了,材料也准备齐全了,可以开始下锅了!",现在要做的只是实例化API所提供的Excel基本数据类型,并将它们添加到工作表中就可以了,参考下面的代码片段: //1.添加Label对象 jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell"); ws.addCell(labelC); //添加带有字型Formatting的对象 jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true); jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf); jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF); ws.addCell(labelCF); //添加带有字体颜色Formatting的对象 jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED); jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc); jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC); ws.addCell(labelCF); //2.添加Number对象 jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926); ws.addCell(labelN); //添加带有formatting的Number对象 jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##"); jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf); jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN); ws.addCell(labelNF); //3.添加Boolean对象 jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false); ws.addCell(labelB); //4.添加DateTime对象 jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date()); ws.addCell(labelDT); //添加带有formatting的DateFormat对象 jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss"); jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df); jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF); ws.addCell(labelDTF); 这里有两点大家要引起大家的注意 。第一点,在构造单元格时,单元格在工作表中的位置就已经确定了 。一旦创建后 , 单元格的位置是不能够变更的 , 尽管单元格的内容是可以改变的 。第二点,单元格的定位是按照下面这样的规律(column, row),而且下标都是从0开始,例如 , A1被存储在(0, 0),B1被存储在(1, 0) 。最后,不要忘记关闭打开的Excel工作薄对象,以释放占用的内存,参见下面的代码片段: //写入Exel工作表 wwb.write(); //关闭Excel工作薄对象 wwb.close(); 这可能与读取Excel文件的操作有少少不同 , 在关闭Excel对象之前 , 你必须要先调用write()方法,因为先前的操作都是存储在缓存中的,所以要通过该方法将操作的内容保存在文件中 。如果你先关闭了Excel对象,那么只能得到一张空的工作薄了 。拷贝、更新Excel工作薄 接下来简要介绍一下如何更新一个已经存在的工作?。?主要是下面二步操作 , 第一步是构造只读的Excel工作?。?第二步是利用已经创建的Excel工作薄创建新的可写入的Excel工作?。?参考下面的代码片段:(完整代码见ExcelModifying.java) //创建只读的Excel工作薄的对象 jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile)); //创建可写入的Excel工作薄对象 jxl.write.WritableWorkbookwwb = Workbook.createWorkbook(new File(targetfile), rw); //读取第一张工作表 jxl.write.WritableSheet ws = wwb.getSheet(0); //获得第一个单元格对象 jxl.write.WritableCell wc = ws.getWritableCell(0, 0); //判断单元格的类型, 做出相应的转化 if(wc.getType() == CellType.LABEL) { Label l = (Label)wc; l.setString("The value has been modified."); } //写入Excel对象 wwb.write(); //关闭可写入的Excel对象 wwb.close(); //关闭只读的Excel对象 rw.close(); 之所以使用这种方式构建Excel对象,完全是因为效率的原因,因为上面的示例才是API的主要应用 。为了提高性能 , 在读取工作表时,与数据相关的一些输出信息 , 所有的格式信息 , 如:字体、颜色等等,是不被处理的,因为我们的目的是获得行数据的值,既使没有了修饰,也不会对行数据的值产生什么影响 。唯一的不利之处就是,在内存中会同时保存两个同样的工作表,这样当工作表体积比较大时,会占用相当大的内存 , 但现在好像内存的大小并不是什么关键因素了 。一旦获得了可写入的工作表对象,我们就可以对单元格对象进行更新的操作了,在这里我们不必调用API提供的add()方法,因为单元格已经于工作表当中 , 所以我们只需要调用相应的setXXX()方法,就可以完成更新的操作了 。尽单元格原有的格式化修饰是不能去掉的 , 我们还是可以将新的单元格修饰加上去,以使单元格的内容以不同的形式表现 。新生成的工作表对象是可写入的,我们除了更新原有的单元格外,还可以添加新的单元格到工作表中 , 这与示例2的操作是完全一样的 。最后 , 不要忘记调用write()方法,将更新的内容写入到文件中,然后关闭工作薄对象 , 这里有两个工作薄对象要关闭,一个是只读的 , 另外一个是可写入的 。小结 本文只是对Java Excel API中常用的方法作了介绍,要想更详尽地了解API,请大家参考API文档 , 或源代码 。Java Excel API是一个开放源码项目,请大家关注它的最新进展,有兴趣的朋友也可以申请加入这个项目 , 或者是提出宝贵的意见 。
【go语言生成文档 go语言如何】go语言生成文档的介绍就聊到这里吧 , 感谢你花时间阅读本站内容 , 更多关于go语言如何、go语言生成文档的信息别忘了在本站进行查找喔 。
推荐阅读
- 智邦国际erp仓库管理系统自学,智邦国际erp系统怎么用
- 如何删除word中的框,如何删除word中的框框
- flutter统计服务,flutter 百度统计
- java中堆栈的基本代码 java中堆栈分别存放什么数据
- sap科目余额,sap科目余额表查询
- html5的js文件中文乱码,js文件乱码怎么解决
- 哪个平台能看快手直播,在什么软件里看快手能挣钱
- vb.netusb开发 vb开发windows程序
- ibm机箱硬盘怎么拆,ibm 380ed拆硬盘