Java的File类调用delete后执行写操作

File file = new File(path);
file.delete();
FileOutputStream out = new FileOutputStream(file);
out.write(fileContent);

out.close();

请问为什么file被delete后仍可以对其进行写入操作,文件是什么时候被创建的?

3个回答

/*FileOutputStream 源码*/
public FileOutputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null, false);
}

执行new FileOutputStream的时候 这里会new 一个File

FileOutputStream out = new FileOutputStream(file);这个时候被创建的

File file = new File(path); 这里只是指定文件路径的
file.delete();所以在这里可以说是没有文件可删的
FileOutputStream out = new FileOutputStream(file); 创建指定的文件

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java windows环境下 file.delete遇到无法删除问题,程序结束后文件随之消失

windows环境下, 调用file.delete()方法,返回true 但是文件依然可以在文件夹中看到,无法对文件进行操作 结束程序,文件消失(没有调用deleteOnExit方法) 问,,,如何直接删除文件 确认过几遍流的问题,没能在代码中找到未关闭的流

java.io.File.renameTo会删除源文件?

现在我有一个操作,需要调用java.io.File.renameTo这个方法重命名文件。实现代码大致如下, [code="java"]public void reNameFile() { File file = new File( "C:\\folderA\\sample.zip"); File newFile = new File("C:\\folderB\\sample.zip"); boolean reNameOK = file.renameTo(newFile); boolean deleteOK = file.delete(); if (reNameOK) { System.out.println("rename ok"); } if((deleteOK){ System.out.println("delete ok"); } }[/code] 我发现在调用renameTo之后,在把sample.zip放到folderB中的同时,folderA中的sample.zip也被删除了,这样一来当调用delete的时候,返回值deleteOK就是false。这是我在windows下测试的结果,不知道在linux下是怎么样的。如果renameTo在linux下也能删除源文件,是不是就不需要调用delete了?

使用java创建文件到本地,创建后立即删除失败

1.创建文件后使用java代码的delete()删除,返回true。但是去磁盘看,文件还是存在。 2.创建文件后去磁盘删除,提示正在被jvm占用。 3.重启项目,或者等待一段时间后,才可以使用程序删除或者使用磁盘删除。

java 调用cmd 执行读取sql文件问题?求大神帮看下

Runtime run =Runtime.getRuntime(); Process process = run.exec("cmd /cmysql -u root -pssdlh test <d:/test.sql"); InputStreamReader ir = new InputStreamReader(process .getInputStream()); LineNumberReader input = new LineNumberReader(ir); String line; while ((line = input.readLine()) != null) System.out.println(line); input.close(); 为什么这里执行 不成功,没有效果。而且会出现下边那些信息 不知道这表示什么意思。。 mysql Ver 14.12 Distrib 5.0.96, for Win64 (unknown) Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Usage: mysql [OPTIONS] [database] -?, --help Display this help and exit. -I, --help Synonym for -? --auto-rehash Enable automatic rehashing. One doesn't need to use 'rehash' to get table and field completion, but startup and reconnecting may take a longer time. Disable with --disable-auto-rehash. -A, --no-auto-rehash No automatic rehashing. One has to use 'rehash' to get table and field completion. This gives a quicker start of mysql and disables rehashing on reconnect. WARNING: options deprecated; use --disable-auto-rehash instead. -B, --batch Don't use history file. Disable interactive behavior. (Enables --silent) --character-sets-dir=name Directory where character sets are. --default-character-set=name Set the default character set. -c, --comments Preserve comments. Send comments to the server. The default is --skip-comments (discard comments), enable with --comments -C, --compress Use compression in server/client protocol. -#, --debug[=#] This is a non-debug version. Catch this and exit -D, --database=name Database to use. --delimiter=name Delimiter to be used. -e, --execute=name Execute command and quit. (Disables --force and history file) -E, --vertical Print the output of a query (rows) vertically. -f, --force Continue even if we get an sql error. -G, --named-commands Enable named commands. Named commands mean this program's internal commands; see mysql> help . When enabled, the named commands can be used from any line of the query, otherwise only from the first line, before an enter. Disable with --disable-named-commands. This option is disabled by default. -g, --no-named-commands Named commands are disabled. Use \* form only, or use named commands only in the beginning of a line ending with a semicolon (;) Since version 10.9 the client now starts with this option ENABLED by default! Disable with '-G'. Long format commands still work from the first line. WARNING: option deprecated; use --disable-named-commands instead. -i, --ignore-spaces Ignore space after function names. --local-infile Enable/disable LOAD DATA LOCAL INFILE. -b, --no-beep Turn off beep on error. -h, --host=name Connect to host. -H, --html Produce HTML output. -X, --xml Produce XML output --line-numbers Write line numbers for errors. -L, --skip-line-numbers Don't write line number for errors. WARNING: -L is deprecated, use long version of this option instead. -n, --unbuffered Flush buffer after each query. --column-names Write column names in results. -N, --skip-column-names Don't write column names in results. WARNING: -N is deprecated, use long version of this options instead. -O, --set-variable=name Change the value of a variable. Please note that this option is deprecated; you can set variables directly with --variable-name=value. --sigint-ignore Ignore SIGINT (CTRL-C) -o, --one-database Only update the default database. This is useful for skipping updates to other database in the update log. -p, --password[=name] Password to use when connecting to server. If password is not given it's asked from the tty. -W, --pipe Use named pipes to connect to server. -P, --port=# Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306). --prompt=name Set the mysql prompt to this value. --protocol=name The protocol of connection (tcp,socket,pipe,memory). -q, --quick Don't cache result, print it row by row. This may slow down the server if the output is suspended. Doesn't use history file. -r, --raw Write fields without conversion. Used with --batch. --reconnect Reconnect if the connection is lost. Disable with --disable-reconnect. This option is enabled by default. -s, --silent Be more silent. Print results with a tab as separator, each row on new line. --shared-memory-base-name=name Base name of shared memory. -S, --socket=name Socket file to use for connection. --ssl Enable SSL for connection (automatically enabled with other flags). Disable with --skip-ssl. --ssl-ca=name CA file in PEM format (check OpenSSL docs, implies --ssl). --ssl-capath=name CA directory (check OpenSSL docs, implies --ssl). --ssl-cert=name X509 cert in PEM format (implies --ssl). --ssl-cipher=name SSL cipher to use (implies --ssl). --ssl-key=name X509 key in PEM format (implies --ssl). --ssl-verify-server-cert Verify server's "Common Name" in its cert against hostname used when connecting. This option is disabled by default. -t, --table Output in table format. -T, --debug-info Print some debug info at exit. --tee=name Append everything into outfile. See interactive help (\h) also. Does not work in batch mode. Disable with --disable-tee. This option is disabled by default. --no-tee Disable outfile. See interactive help (\h) also. WARNING: option deprecated; use --disable-tee instead -u, --user=name User for login if not current user. -U, --safe-updates Only allow UPDATE and DELETE that uses keys. -U, --i-am-a-dummy Synonym for option --safe-updates, -U.

java 删除文件不成功

   我在项目中需要用到文件上传,用jspsmartupload上传文件成功后,将此文件拷贝到服务器的另一个目录里,再去做数据库操作,如果数据库操作失败了,表明此次操作失败,这个文件也就没用了,于是在异常处理部分里把这个文件删掉。可是经常是删不掉。 <br />不知道为什么? <br />    于是单步调试,我尝试在文件拷贝成功后,数据库操作未做的时候,手动的在机子上删除文件,结果windows提示说 文件正被使用,不让删除。 <br />    纳闷了?难道是jvm没有回收相关资源,os认为此文件仍被使用? <br />   这个问题也不是每次都是,有时候顺利删除,有时候不行。比较郁闷了。<br /><strong>问题补充:</strong><br />是 调用org.apache.commons.io.FileUtils, <br />FileUtils.copyFile(tempFile, newFile); <br />之后,newFile这个文件删不掉。FileUtils应该把相关的IO流都关闭了吧。

重命名一个已存在的文件

有两个文件: `File src = new File("loc/xyz.mp3")` 和 `File dst=new File("loc/xyz1.mp3")`。 现在我想将`xyz.mp3`重命名为`dst`,同时删除`src`文件,怎么才能实现?我试过的代码: src.delete(); dst.renameTo(src); 在应用的背景中异步运行,第一次执行时成功了,但是第二次就崩溃了。 请帮忙解决一下,谢谢。

尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,求大神帮忙指正

java新人,尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,调用 insert 指令没问题,而 select 指令出现如下报错: com.microsoft.sqlserver.jdbc.SQLServerException: ')' 附近有语法错误。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:792) at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:689) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:616) at com.javaee.servletxm.comm.MSSQLJDBC.select(MSSQLJDBC.java:160) at com.javaee.servletxm.comm.MSSQLJDBC.select(MSSQLJDBC.java:195) at com.javaee.servletxm.comm.MSSQLJDBC.selectFirstValue(MSSQLJDBC.java:172) at com.javaee.servletxm.comm.MSSQLJDBC.getPageNumber(MSSQLJDBC.java:221) at com.javaee.servletxm.comm.MSSQLJDBC.selectByFY(MSSQLJDBC.java:259) at com.javaee.servletxm.kqgl.KqManager.getAllKqxx(KqManager.java:38) at com.javaee.servletxm.kqgl.Kqwh.doGet(Kqwh.java:47) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1760) at java.lang.Thread.run(Thread.java:724) 这是具体的代码,求大神帮忙指正 package com.javaee.servletxm.comm; /** * jdbc下 SQL Server 2005 数据库的封装类 */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.List; import java.util.Properties; public class MSSQLJDBC { // 配置文件名称 private String iniFileName = MSSQLJDBC.class.getClassLoader().getResource("/com/javaee/servletxm/comm").getPath()+ "mssql.properties"; // 连接数据库 private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String url = "jdbc:sqlserver://localhost;DatabaseName=jdms"; private String user = "sa"; private String password = ""; // 定义连接属性 private Connection connect = null; // 与连接有关三个通道 private Statement stmt = null; private PreparedStatement pstmt = null; private CallableStatement cstmt = null; public static final String stmtType = "stmt"; public static final String pstmtType = "pstmt"; public static final String cstmtType = "cstmt"; // 定义参数类型的静态常量值 public static final String varCharType = "varchar"; public static final String intType = "int"; public static final String doubleType = "decimal"; public static final String dateType = "datetime"; public static final String timeType = "timestamp"; // 定义全局的结果集 private ResultSet rs = null; // 在构造方法中对属性进行初始化赋值操作 public MSSQLJDBC() { // 读取配置文件 readIni(); // 初始化连接 initConnect(); } // 可配置文件 .properties // 读取配置文件 private void readIni() { File file = new File(iniFileName); if (!file.exists()) { // 创建一个文件 try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 判断文件是否有值 if (file.length() == 0) {// 说明是一个空文件 // 初始化值 try { Properties p = new Properties(); p.put("driver", driver); p.put("url", url); p.put("user", user); p.put("password", password); FileOutputStream fos = new FileOutputStream(file); p.store(fos, "配置文件信息"); fos.close(); } catch (IOException e) { e.printStackTrace(); } } else {// 如果有值 // 将信息读取出来 try { FileInputStream fis = new FileInputStream(file); Properties p = new Properties(); p.load(fis); this.driver = p.getProperty("driver"); this.url = p.getProperty("url"); this.user = p.getProperty("user"); this.password = p.getProperty("password"); fis.close(); } catch (IOException e) { e.printStackTrace(); } } } // 建立连接 private void initConnect() { try { Class.forName(driver); this.connect = DriverManager.getConnection(url, user, password); this.connect.setAutoCommit(false);// 设置手动提交事务 this.stmt = connect.createStatement(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /*/ 从tomcat缓冲池获取连接 private void initConnectFromDataSource() { try { InitialContext ic = new InitialContext(); DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/oracleds"); this.connect = ds.getConnection(); this.connect.setAutoCommit(false); this.stmt = connect.createStatement(); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }*/ // 需要调用者控制事务的两个方法 // 提交方法 private void commit() { try { this.connect.commit(); } catch (SQLException e) { e.printStackTrace(); } } // 回滚事务 private void rollBack() { try { this.connect.rollback(); } catch (SQLException e) { e.printStackTrace(); } } // 定义一组与操作有关的方法 // 使用普通通道执行的select public ResultSet select(String sql) { ResultSet prs = null; if (stmt != null) { try { prs = stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } } return prs; } // 根据传入的sql直接获取单一值 // 使用此方法的时候sql语句返回的单一的值 public String selectFirstValue(String sql, String type, List<String> csList) { String rstr = ""; rs = select(sql, type, csList);// 确定此结果集只有一条记录 if (rs != null) {// 说明结果集有值,且只有一条记录 try { ResultSetMetaData rsmd = rs.getMetaData(); if (rs.next()) { // 移动到第一条记录 String p_type = rsmd.getColumnTypeName(1); rstr = getResultSetValue(rs, 1, p_type); } } catch (SQLException e) { e.printStackTrace(); } } return rstr; } // 使用普通通道执行的select /** * sql 参数 type 使用通道的类型 stmt pstmt cstmt List<String> csList 预编通道执行的参数队列 * String 最少必须满足如下条件的字符串 数据类型 ,数据值 数据类型定义说明 字符串 数字(整数、小数) 日期(DATE、TIMESTAMP) */ public ResultSet select(String sql, String type, List<String> csList) { ResultSet prs = null; if (type.equals(stmtType)) {// 说明使用普通通道来执行 prs = select(sql); } else if (type.equals(pstmtType)) {// 说明使用预编译通道来执行 if (connect != null) { try { pstmt = connect.prepareStatement(sql); // 验证传入的参数和sql中的参数个数一致 setPrepareStatement(pstmt, csList);// 将参数设置进当前的预编译通道 prs = pstmt.executeQuery(); } catch (Exception e) { e.printStackTrace(); } } } return prs; } // 获取 总页数 public int getPageNumber(String sql, String type, List<String> csList, int pageSize) { // 处理总页数 int pageNumber = 0; // 第一步获取sql总记录数 String psql = "select count(*) from (" + sql + ")"; String result = selectFirstValue(psql, type, csList); int rows = 0; if (result != null && result.trim() != "") { rows = Integer.valueOf(result); } if (rows % pageSize == 0) { pageNumber = rows / pageSize; } else { pageNumber = rows / pageSize + 1; } return pageNumber; } /** * 自动添加分页查询方法 * * @param sql * 要执行的sql * @param type * 执行方式 * @param csList * 参数列表 * @param curPage * 当前页数 * @param pageSize * 每页记录数 默认为10 * @return */ public ResultSet selectByFY(String sql, String type, List<String> csList, int curPage, int pageSize) { ResultSet prs = null; // 处理 每页记录数 if (pageSize <= 0) { pageSize = 10;// 默认页面10条记录 } int pageNumber = getPageNumber(sql, type, csList, pageSize); // 处理当前页数 if (curPage < 0) { curPage = 1;// 默认第一页 } if (curPage > pageNumber) { curPage = pageNumber; } String psql = "select tmpaa.* from (select tmpa.*,(select (ROW_NUMBER() over (order by id))) as rn from (" + sql + ") tmpa where (select (ROW_NUMBER() over (order by id))) <= " + (curPage * pageSize) + ") tmpaa where tmpaa.rn >= " + ((curPage - 1) * pageSize + 1); prs = select(psql, type, csList); return prs; } // 将预编通道执行的参数队列按照指定规则设置进通道中 private void setPrepareStatement(PreparedStatement p, List<String> csList) throws Exception { if (csList != null && csList.size() > 0) { for (int i = 0; i < csList.size(); i++) { // 此处的str是数据类型 ,数据值 // 解析出数据类型和数据值 String[] s = csList.get(i).split(","); String sType = s[0]; String sData = s[1]; if (varCharType.equals(sType)) { p.setString(i + 1, sData); } else if (intType.equals(sType)) { p.setInt(i + 1, Integer.valueOf(sData)); } else if(doubleType.equals(sType)){ p.setDouble(i+1, Double.valueOf(sData)); } else if (dateType.equals(sType)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); java.util.Date d = sdf.parse(sData); p.setDate(i + 1, new Date(d.getTime())); } else if (timeType.equals(sType)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); java.util.Date d = sdf.parse(sData); p.setTimestamp(i + 1, new Timestamp(d.getTime())); } } } } // 定义一个执行insert update delete的方法 public int iudSql(String sql) { int ri = -1; if (stmt != null) { try { ri = stmt.executeUpdate(sql); commit(); } catch (SQLException e) { e.printStackTrace(); rollBack(); } } return ri; } public int iudSql(String sql, String type, List<String> csList) { int ri = -1; if (stmtType.equals(type)) { ri = iudSql(sql); } else if (pstmtType.equals(type)) { if (connect != null) { try { pstmt = connect.prepareStatement(sql); setPrepareStatement(pstmt, csList); ri = pstmt.executeUpdate(); commit(); } catch (Exception e) { e.printStackTrace(); rollBack(); } } } return ri; } /** * 编写一个通用的遍历ResultSet结果集的方法 */ public void iteratorResultSet(ResultSet rs) { try { if (rs != null) {// 说明有值 // ResultSetMetaData 此对象里封装了与结果集有关所有信息 // 此结果有几列组成,每列的列名,每列的数据类型 ResultSetMetaData rsmd = rs.getMetaData(); // 得到结果集列数 int columnCount = rsmd.getColumnCount(); // 输出此结果集的所有列名 for (int i = 1; i <= columnCount; i++) { System.out.print(rsmd.getColumnName(i) + "\t"); } System.out.println(""); // 遍历输出所有的数据 while (rs.next()) { // 如何在获取rs中的数据? for (int i = 1; i <= columnCount; i++) { String type = rsmd.getColumnTypeName(i); System.out.print(getResultSetValue(rs, i, type) + "\t"); } System.out.println(""); } } } catch (SQLException e) { e.printStackTrace(); } } // 从ResultSet中根据数据类型来得到数据值的方法 // 先处理常用的sqlserver的数据类型的对应 private String getResultSetValue(ResultSet rs, int index, String type) { String rstr = ""; try { if (rs != null && !"".equals(type) && index > 0) { if ("char".equals(type.trim()) || "varchar".equals(type.trim())) { if (rs.getString(index) != null) { rstr = rs.getString(index); } } else if ("int".equals(type.trim())) { rstr = rs.getInt(index) + ""; } else if ("decimal".equals(type.trim())) { rstr = String.valueOf(rs.getDouble(index)); } else if ("date".equals(type.trim())) { Date date = rs.getDate(index); if (date != null) { rstr = new SimpleDateFormat("yyyy年MM月dd日").format(date); } } else if ("timestamp".equals(type.trim()) || "datetime".equals(type.trim())) { Timestamp tt = rs.getTimestamp(index); if (tt != null) { rstr = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(tt); } } } } catch (SQLException e) { e.printStackTrace(); } return rstr; } /* //统一事务管理的批量sql的封装 public boolean iudSql(List<String> sqlList){ int ri = -1; if(stmt!=null){ try { ri = stmt.executeUpdate(sql); commit(); } catch (SQLException e) { e.printStackTrace(); rollBack(); } } return ri; }*/ // 关闭连接 public void close() { try { // 关闭所有的与数据库有关的对象 if (rs != null) { rs.close(); rs = null; } if (stmt != null) { stmt.close(); stmt = null; } if (pstmt != null) { pstmt.close(); pstmt = null; } if (cstmt != null) { cstmt.close(); cstmt = null; } if (connect != null) { connect.close(); connect = null; } } catch (SQLException e) { e.printStackTrace(); } } }

java菜鸟真心求教大神,谢谢!

请大神看看下面的代码,我检查了好几次都没发现错误,为何在编译的时候会出现java找不到符号的情况。。。。代码可能有点长。。。麻烦各位了,谢谢! ``` //测试FileWriter类 public class TestFileWriter { public static void showFile(java.io.File file) { char buff[] = new char[22]; int ret = 0; System.out.println("Showfile begin["+file.getName()+"]:"); java.io.FileReader read_file = null; try { //创建读取文件对象 read_file = new java.io.FileReader(file); do { //读取一段字符,每次22个字符 ret = read_file.read(buff); for (int i=0; i<ret; i++) { System.out.print(buff[i]); //逐个输出读入的字符 } } while (ret!=-1); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { //关闭打开的文件 try { read_file.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } System.out.println("\nshowfile end ["+file.getName()+"]."); } public static void main(String[] argv) { char buff[] = new char[48]; char ch = 'A'; int ret = 0; for (int i=0; i<26; i++) { buff[i] = ch++; //输入A-Z共26个字母到字符数组buff } java.io.File _write = new java.io.File("_write.txt"); java.io.FileWriter write_java = null; try { System.out.println(_write.getName()+"exist?"+_write.exists()); write_java = new java.io.FileWriter("_write.txt"); //创建写入文本的对象 System.out.println(_write.getName()+"exist?"+_write.exists()); write_java.write(buff,0,26); //将buff数组里的内容输出到指定文件 System.out.println(_write.getName()+"exist?"+_write.exists()); //write_java.flush(); write_java.close(); //调用close()会自动执行flush(),如果将这一行放在show_file()方法后面,则show_file()显示文件为空,因为未写入 System.out.println("\nWrite into an empty file."); showFile(_write); //调用show_file()方法 } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { write_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } java.io.FileWriter append_java = null; } try { //使用append()方法向文件追加内容 append_java = new java.io.FileWriter(_write); //以普通形式打开,结果依然覆盖原文 append_java.append("Someting appended in the file...."); append_java.close(); System.out.println("\n以普通方式打开,调用append()方法"); showFile(_write); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { append_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } try { //以追加方式打开文件,并使用append()方法向文件追加内容 append_java = new java.io.FileWriter(_write, true); append_java.write(buff,0,26); append_java.close(); System.out.println("\n以追加模式打开文件,用append()方法追加内容到文件中"); showFile(_write); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { append_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } try { //以非追加方式打开,并用append()方法向文件追加内容 append_java = new java.io.FileWriter(_write, false); append_java.append(new String(buff).trim()); append_java.close(); System.out.println("\n以非追加方式打开,调用append()方法"); showFile(_write); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { append_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } _write.delete(); } } ```

JAVA通讯录 TXT文档分页问题

我在做一个JAVA通讯录,想请问一下如何把这个TXT文档 超过20行分页显示,请前辈们多多指教,谢谢 方便的话请帮我写一下代码看看行吗 package MyAddBook; import java.awt.Choice;//选择 import java.awt.Container;//容器 import java.awt.Frame; import java.awt.GridLayout;//间距 import java.awt.Toolkit;//居中 import java.awt.event.ActionEvent;//事件 import java.awt.event.ActionListener;//监听 import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter;//文本输出流打印对象的格式化 import java.text.Collator;//区分语言 import java.util.Arrays; import java.util.Comparator;//排序 import java.util.Scanner; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane;//消息提示框 import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyAddBook { public static JFrame frame; public MyAddBook() { frame=new JFrame("通讯录");//面板标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭按钮关闭窗口 frame.setVisible(true);//窗口可见 /* * 在一个窗口中,我们经常需要给窗口添加菜单条。在 Java * 中这一部分是由三个类实现的,它们是JMenuBar、JMenu和JMenuItem, 分别对应菜单条、菜单和菜单项。 * 同时,可以给JMenuItem注册侦听器,但不能对JMenuBar,JMenu注册侦听器. * * 一、菜单条(JMenuBar) * JMenuBar 的构造方法是 JMenuBar(),相当简单。在构造之后,还要将它设置成窗口的菜单条,这里要用 setJMenuBar * 方法: JMenuBar TestJMenuBar=new JMenuBar(); * TestFrame.setJMenuBar(TestJMenuBar); 需要说明的是,JMenuBar 类根据 JMenu * 添加的顺序从左到右显示,并建立整数索引。 * * 二、菜单(JMenu) 在添加完菜单条后,并不会显示任何菜单,所以还需要在菜单条中添加菜单。菜单 * JMenu 类的构造方法有4种: JMenu() 构造一个空菜单。 JMenu(Action a) * 构造一个菜单,菜单属性由相应的动作来提供。 JMenu(String s) 用给定的标志构造一个菜单。 JMenu(String * s,Boolean b) 用给定的标志构造一个菜单。如果布尔值为false,那么当释放鼠标按钮后,菜单项会消失;如果布尔值为true, * 那么当释放鼠标按钮后,菜单项仍将显示。这时的菜单称为 tearOff 菜单。 在构造完后,使用 JMenuBar 类的 add * 方法添加到菜单条中。 * * 三、菜单项(JmenuItem) 接下来的工作是往菜单中添加内容。 * 在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。 在构造完后,使用 JMenu 类的 * add 方法添加到菜单中。 子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。 */ JMenuBar bar=new JMenuBar(); JMenu edit=new JMenu("编辑"); JMenuItem edit1=new JMenuItem("录入"); JMenuItem edit2=new JMenuItem("查询"); JMenuItem edit3=new JMenuItem("删除"); JMenuItem edit4=new JMenuItem("修改"); JMenuItem edit5=new JMenuItem("排序"); edit1.addActionListener(new Type());//监听 JMenu show=new JMenu("按性别显示"); JMenuItem show1=new JMenuItem("男"); JMenuItem show2=new JMenuItem("女"); Container c=frame.getContentPane(); JPanel p=new JPanel(); c.add(p); p.add(bar); bar.add(edit); bar.add(show); edit.add(edit1); edit.add(edit2); edit.add(edit3); edit.add(edit4); edit.add(edit5); show.add(show1); show.add(show2); // 获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; // 然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); frame.setSize(500, 300); /* * 1. JFrame是javax.swing.JFrame的类,Frame是Java.awt.Frame的类 * * 2. 关闭窗口的方式不同: * 2.1 JFrame的关闭方式:传递参数使得关闭按钮有效 * Frame的关闭方式:加监听使得关闭按钮有效 */ edit2.addActionListener(new ActionListener() // 监听查询 { public void actionPerformed(ActionEvent e) { new Operation("查询", 2).dialog.setVisible(true); } }); edit3.addActionListener(new ActionListener() // 监听删除 { public void actionPerformed(ActionEvent e) { //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); new Operation("删除", 3).dialog.setVisible(true); } }); edit4.addActionListener(new ActionListener() // 监听修改 { public void actionPerformed(ActionEvent e) { new Operation("修改", 4).dialog.setVisible(true); } }); // 输出类 edit5.addActionListener(new ActionListener() // 监听排序 { public void actionPerformed(ActionEvent e) { new Print("按姓名排序后", 2);//调用 排序 函数 } }); show1.addActionListener(new ActionListener() // 监听男 { public void actionPerformed(ActionEvent e) { new Print("男", 1);//调用 匹配 显示 } }); show2.addActionListener(new ActionListener() // 监听女 { public void actionPerformed(ActionEvent e) { new Print("女", 1);//调用 匹配 显示 } }); } public static void main(String[] args) { new MyAddBook(); } public String[] getSortOfChinese(String[] a) { // Collator 类是用来执行区分语言环境,这里使用CHINA Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); // JDKz自带对数组进行排序。 Arrays.sort(a, cmp); return a; } } class Operation{ private Frame frame; /* * public JDialog(Dialog owner, String title, boolean modal) * 创建一个具有指定标题、模式和指定所有者 Dialog 的对话框。 此构造方法将该组件的语言环境属性设置为 * JComponent.getDefaultLocale 所返回的值。 * * 参数: owner - 显示该对话框的所有者 Dialog; 如果此对话框没有所有者,则为 null * title -该对话框的标题栏中所显示的 String * modal - 指定对话框在显示时是否阻塞用户向其他顶层窗口输入。如果为true,则模式类型属性被设置为 DEFAULT_MODALITY_TYPE; * 否则对话框是无模式的。 * 抛出: * HeadlessException - 如果 GraphicsEnvironment.isHeadless() 返回 true。 */ JDialog dialog = new JDialog(frame, "查询对话框", true); public Operation(String str, int n) { dialog.setSize(450, 300); //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, dialog.setLocation(width / 2 - 200, height / 2 - 150); Container c = dialog.getContentPane(); /*GridLayout(int rows, int cols, int hgap, int vgap) : 创建具有指定行数、列数以及组件水平、纵向一定间距的网格布局。*/ dialog.setLayout(new GridLayout(2, 1, 5, 5)); JLabel LOperation = new JLabel("请输入要" + str + "人员的名字"); final JTextField Tname = new JTextField(10);//单行文本输入框 JButton sure = new JButton("确定"); JButton cancel = new JButton("取消"); JPanel pane1 = new JPanel(); JPanel pane2 = new JPanel(); c.add(pane1); c.add(pane2); pane1.add(LOperation); pane1.add(Tname); pane2.add(sure); pane2.add(cancel); dialog.setDefaultCloseOperation(dialog.DISPOSE_ON_CLOSE); if (n == 2) { sure.addActionListener(new ActionListener() // 查询 { public void actionPerformed(ActionEvent e) { try { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); /* * 这里while括号里面的find.hasNext()方法用于判断find对象中有没有下一条数据 * 返回 bool 值 , 有则返回true 无 则返回false * 下面的find.next()是获取find对象中的值 然后赋值给 str 然后输出这个方法 * 其实就是循环输出it 对象中所有的值 */ while (find.hasNext()) { if (find.next().equals(Tname.getText())) { dialog.dispose();//关闭窗体,并释放一部分资源。 Type fd = new Type(); fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); fd.Csex.select(find.next()); fd.Tunit.setText(find.next()); fd.Thomephone.setText(find.next()); fd.Temail.setText(find.next()); fd.Ttelephone.setText(find.next()); fd.Type(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 3) { sure.addActionListener(new ActionListener() // 删除 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt");//创建文件 Scanner find = new Scanner(file);//输入 FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) {//取下一个元素 String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { find.next(); find.next(); find.next(); find.next(); find.next(); } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); JOptionPane.showMessageDialog(null, "删除成功", "删 除 结 果", JOptionPane.INFORMATION_MESSAGE); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); JOptionPane.showMessageDialog(null, "未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 4) { sure.addActionListener(new ActionListener() // 修改 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt"); Scanner find = new Scanner(file); FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) { String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { dialog.dispose(); Type fd = new Type(); Type.y = 1; fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); String s1 = find.next(); fd.Csex.select(s1); String s2 = find.next(); fd.Tunit.setText(s2); String s5 = find.next(); fd.Thomephone.setText(s5); String s6 = find.next(); fd.Temail.setText(s6); String s7 = find.next(); fd.Ttelephone.setText(s7); fd.Type(); if (Type.z == 1) { write.print(Tname.getText() + "\t"); write.print(s1 + "\t"); write.print(s2 + "\t\t"); write.print(s5 + "\t\t"); write.print(s6 + "\t\t"); write.println(s7); Type.z = 2; } } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } cancel.addActionListener(new ActionListener() // 取消 { public void actionPerformed(ActionEvent e) { dialog.dispose();//关闭查询面板 } }); } } class Print{ public JTextArea area;// 多行文本输入框 public Print(String st, int n) { JFrame frame = new JFrame(st + "信息如下"); area = new JTextArea();// 多行文本输入框 frame.add(area); frame.setVisible(true); frame.setSize(1000, 500); frame.setLocation(350, 150);// 显示位置坐标 if (n == 2) try // 排序 { int i, j, k; String[] all; all = new String[1000]; BufferedReader read = new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); int z = 1, count = 0; while (z == 1) { for (i = 0; i < 1000; i++) { String str = read.readLine(); if (str != null) { all[i] = str; count++; } else z = 0; } } String[] bll; bll = new String[count]; for (i = 0; i < count; i++) bll[i] = all[i]; getSortOfChinese(bll);// 调用排序函数 for (i = 0; i < count; i++) area.append(bll[i] + '\n');// 在指定元素的结尾追加内容 read.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } if (n == 1) try // 指定类人员 { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); while (find.hasNext()) { String str1 = find.next(); String str2 = find.next(); if (str2.equals(st)) { area.append(str1 + "\t"); area.append(str2 + "\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + '\n'); } else { find.next(); find.next(); find.next(); find.next(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } } private void getSortOfChinese(String[] bll) { // TODO Auto-generated method stub } } class Type implements ActionListener { public static int z = 2; public static int y = 0; public JLabel Lname, Lsex, Lunit, Lhomephone, Lemail, Ltelephone, Lnote;//添加标签 public JTextField Tname = new JTextField(15), Thomephone = new JTextField(25), Temail = new JTextField(25),Ttelephone = new JTextField(25), Tunit = new JTextField(25); public Choice Csex = new Choice();//创建文本框 public JButton sure, cancel;//添加“确定”“取消”按钮 public JFrame frame = new JFrame("录入联系人信息");//面板标题 public Type() { Csex.addItem("男");//给列表框或组合框等具有列表的对象添加项目 Csex.addItem("女"); } public void Type() { Container c = frame.getContentPane();//创建容器 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击窗口的关闭按钮时程序执行的操作 frame.setSize(800, 400);//窗口大小 frame.setLayout(new GridLayout(7, 2, 7, 7));//设置用户界面上的屏幕组件的格式布局 frame.setVisible(true);//设置面板可见 //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); Lname = new JLabel("姓名");//标签 Lsex = new JLabel("性别"); Lunit = new JLabel("单位"); Lhomephone = new JLabel("住宅电话"); Lemail = new JLabel("Email"); Ltelephone = new JLabel("移动电话"); sure = new JButton("确定"); cancel = new JButton("取消"); JPanel pane1 = new JPanel();//添加面板 JPanel pane2 = new JPanel(); JPanel pane3 = new JPanel(); JPanel pane5 = new JPanel(); c.add(pane1);//将面板添加到容器中 c.add(pane2); c.add(pane3); c.add(pane5); pane1.add(Lname);//将标签添加到面板 pane1.add(Tname); pane1.add(Lsex); pane1.add(Csex); pane2.add(Lunit); pane2.add(Tunit); pane2.add(Lhomephone); pane2.add(Thomephone); pane3.add(Lemail); pane3.add(Temail); pane3.add(Ltelephone); pane3.add(Ttelephone); pane5.add(sure); pane5.add(cancel); sure.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { if (Tname.getText().equals(""))//输入的姓名是否为空 /* * 显示一个错误对话框,该对话框显示的 message 为 'alert': * JOptionPane.showMessageDialog(null, "alert", * "alert", JOptionPane.ERROR_MESSAGE); */ JOptionPane.showMessageDialog(null, "录入失败姓名必须填写", "录入结果", JOptionPane.INFORMATION_MESSAGE); else { try { FileWriter AddressBook = new FileWriter("D:\\AddressBook.txt", true);//写入文件 PrintWriter add = new PrintWriter(AddressBook); String s1, s2, s3,s4; if (Tunit.getText().equals(""))//未输入数据 s1 = "无"; else s1 = Tunit.getText(); if (Thomephone.getText().equals("")) s2 = "无"; else s2 = Thomephone.getText(); if (Temail.getText().equals("")) s3 = "无"; else s3 = Temail.getText(); if (Ttelephone.getText().equals("")) s4 = "无"; else s4 = Ttelephone.getText(); add.println(Tname.getText()+ "\t" + Csex.getSelectedItem() + "\t" + s1 + "\t\t" + s2 + "\t\t" + s3 + "\t\t" + s4); add.close(); AddressBook.close(); z = 1; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (y == 0) { JOptionPane.showMessageDialog(null, "录入成功", "录入结果", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "修改成功", "修改结果", JOptionPane.INFORMATION_MESSAGE); } Tname.setText(""); //删除时传入空白串 Tunit.setText(""); Thomephone.setText(""); Temail.setText(""); Ttelephone.setText(""); } } }); cancel.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { frame.dispose();//关闭面板 z = 0; } }); } public void actionPerformed(ActionEvent e) { new Type().Type(); } }

给这个Java代码插入登录和注册能力,且账号和密码都在TXT文件里?请大神帮助?着急/?wuwuwu?

import java.awt.Choice; import java.awt.Container; import java.awt.GridLayout; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.print.Printable; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.text.Collator; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.WindowConstants; class MyAddBook { public static JFrame frame; public MyAddBook(){ frame=new JFrame("通讯录"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); JMenuBar menubar=new JMenuBar(); JMenu edit=new JMenu("编辑"); JMenuItem edit1=new JMenuItem("录入"); JMenuItem edit2=new JMenuItem("查询"); JMenuItem edit3=new JMenuItem("删除"); JMenuItem edit4=new JMenuItem("修改"); JMenuItem edit5=new JMenuItem("排序"); edit1.addActionListener(new Typein()); JMenu show=new JMenu("显示信息"); JMenuItem show1=new JMenuItem("同学"); JMenuItem show2=new JMenuItem("同事"); JMenuItem show3=new JMenuItem("朋友"); JMenuItem show4=new JMenuItem("亲戚"); JMenuItem show5=new JMenuItem("全体人员"); Container c=frame.getContentPane(); JPanel pane=new JPanel(); c.add(pane); pane.add(menubar); menubar.add(edit); edit.add(edit1); edit.add(edit2); edit.add(edit3); edit.add(edit4); edit.add(edit5); menubar.add(show); show.add(show1); show.add(show2); show.add(show3); show.add(show4); show.add(show5); frame.setSize(300,100); //frame.pack(); //查询修改删除 class Search{ JDialog dialog=new JDialog(frame,"查询对话框",true); public Search(String str,int n){ dialog.setSize(250,200); Container c=dialog.getContentPane(); dialog.setLayout(new GridLayout(2,1,5,5)); JLabel Lsearch=new JLabel("请输入要"+str+"人员的名字:"); final JTextField Tname=new JTextField(10); JButton certain=new JButton("确定"); JButton cancel=new JButton("取消"); //final String in=Tname.getText(); JPanel pane1=new JPanel(); JPanel pane2=new JPanel(); c.add(pane1); c.add(pane2); pane1.add(Lsearch); pane1.add(Tname); pane2.add(certain); pane2.add(cancel); dialog.setDefaultCloseOperation(dialog.DISPOSE_ON_CLOSE); //dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); if(n==2){ certain.addActionListener(new ActionListener() //查询 { public void actionPerformed(ActionEvent e) { try { FileReader file=new FileReader("D:\\AddressBook.txt"); Scanner find=new Scanner(file); while(find.hasNext()){ if(find.next().equals(Tname.getText())){ dialog.dispose(); Typein fd=new Typein(); fd.frame=new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); fd.Cgroup.select(find.next()); fd.Cbirthyear.select(find.next()); fd.Cbirthmonth.select(find.next()); fd.Cbirthday.select(find.next()); fd.Tphone.setText(find.next()); fd.Temail.setText(find.next()); fd.Tother.setText(find.next()); fd.typein(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block //e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block //e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if(n==3){ certain.addActionListener(new ActionListener() //删除 { public void actionPerformed(ActionEvent e) { try { File file=new File("D:\\AddressBook.txt"); Scanner find=new Scanner(file); FileWriter file1=new FileWriter("D:\\AddressBook1.txt",true); PrintWriter write=new PrintWriter(file1); while(find.hasNext()){ String s=find.next(); if(!(s.equals(Tname.getText()))){ write.print(s+'\t'); write.print(find.next()+'\t'); write.print(find.next()+' '); write.print(find.next()+' '); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.println(find.next()); } else { find.next();find.next();find.next();find.next(); find.next();find.next();find.next(); } } //file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2=new File("D:\\AddressBook1.txt"); file2.renameTo(new File( "D:\\AddressBook.txt")); JOptionPane.showMessageDialog(null,"删除成功", "删除结果",JOptionPane.INFORMATION_MESSAGE); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block //e1.printStackTrace(); JOptionPane.showMessageDialog(null, "未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block //e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if(n==4){ certain.addActionListener(new ActionListener() //修改 { public void actionPerformed(ActionEvent e) { try {File file=new File("D:\\AddressBook.txt"); Scanner find=new Scanner(file); FileWriter file1=new FileWriter("D:\\AddressBook1.txt",true); PrintWriter write=new PrintWriter(file1); while(find.hasNext()){ String s=find.next(); if(!(s.equals(Tname.getText()))){ write.print(s+'\t'); write.print(find.next()+'\t'); write.print(find.next()+' '); write.print(find.next()+' '); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.print(find.next()+'\t'); write.println(find.next()); } else{ dialog.dispose(); Typein fd=new Typein(); Typein.y=1; fd.frame=new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); String s1=find.next(); fd.Cgroup.select(s1); String s2=find.next(); fd.Cbirthyear.select(s2); String s3=find.next(); fd.Cbirthmonth.select(s3); String s4=find.next(); fd.Cbirthday.select(s4); String s5=find.next(); fd.Tphone.setText(s5); String s6=find.next(); fd.Temail.setText(s6); String s7=find.next(); fd.Tother.setText(s7); fd.typein(); if(Typein.z==1){ write.print(Tname.getText()+'\t'); write.print(s1+'\t'); write.print(s2+' '); write.print(s3+' '); write.print(s4+'\t'); write.print(s5+'\t'); write.print(s6+'\t'); write.println(s7); Typein.z=2; } } } //file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2=new File("D:\\AddressBook1.txt"); file2.renameTo(new File( "D:\\AddressBook.txt")); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block //e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block //e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } cancel.addActionListener(new ActionListener() //取消 { public void actionPerformed(ActionEvent e) {System.out.println("fdas"); //dialog.dispose(); } }); } } edit2.addActionListener(new ActionListener() //监听查询 { public void actionPerformed(ActionEvent e) { new Search("查询",2).dialog.setVisible(true); } }); edit3.addActionListener(new ActionListener() //监听删除 { public void actionPerformed(ActionEvent e) { new Search("删除",3).dialog.setVisible(true); } }); edit4.addActionListener(new ActionListener() //监听修改 { public void actionPerformed(ActionEvent e) { new Search("修改",4).dialog.setVisible(true); } }); //输出类 class Print{ public JTextArea area; public Print(String st,int n){ JFrame frame = new JFrame(st+"信息如下"); frame.setSize(800, 400); //frame.setLocation(350, 150); area = new JTextArea(); frame.add(area); frame.setVisible(true); if(n==2) try //排序 {int i,j,k; String []all; all=new String[1000]; BufferedReader read=new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓名"+'\t'+"组别"+'\t'+"生日"+'\t'+"电话"+'\t'+"Email"+'\t'+"其他"+'\n'); int z=1,count=0; while(z==1){ for(i=0;i<1000;i++){ String str=read.readLine(); if(str!=null) {all[i]=str;count++;} else z=0; } } String[] bll; bll=new String[count]; for(i=0;i<count;i++) bll[i]=all[i]; getSortOfChinese(bll); for (i = 0; i < count; i++) area.append(bll[i]+'\n'); read.close(); }catch (FileNotFoundException e1) { e1.printStackTrace(); }catch (IOException e2){ e2.printStackTrace(); } if(n==1) try //各类人员 { FileReader file=new FileReader("D:\\AddressBook.txt"); Scanner find=new Scanner(file); area.append("姓名"+'\t'+"组别"+'\t'+"生日"+'\t'+"电话"+'\t'+"Email"+'\t'+"其他"+'\n'); while(find.hasNext()){ String str1=find.next(); String str2=find.next(); if(str2.equals(st)){ area.append(str1+'\t'); area.append(str2+'\t'); area.append(find.next()+' '); area.append(find.next()+' '); area.append(find.next()+'\t'); area.append(find.next()+'\t'); area.append(find.next()+'\t'); area.append(find.next()+'\n'); } else{ find.next();find.next();find.next();find.next(); find.next();find.next(); } } file.close(); find.close(); }catch (FileNotFoundException e1) { e1.printStackTrace(); }catch (IOException e2){ e2.printStackTrace(); } if(n==0) try //全体人员信息 { BufferedReader read=new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓名"+'\t'+"组别"+'\t'+"生日"+'\t'+"电话"+'\t'+"Email"+'\t'+"其他"+'\n'); int z=1; while(z==1){ String str=read.readLine(); if(str!=null) area.append(str+'\n'); else z=0; } read.close(); }catch (FileNotFoundException e1) { e1.printStackTrace(); }catch (IOException e2){ e2.printStackTrace(); } } } edit5.addActionListener(new ActionListener() //监听排序 { public void actionPerformed(ActionEvent e) { new Print("按姓名排序后",2); } }); show1.addActionListener(new ActionListener() //监听同学 { public void actionPerformed(ActionEvent e) { new Print("同学",1); } }); show2.addActionListener(new ActionListener() //监听同事 { public void actionPerformed(ActionEvent e) { new Print("同事",1); } }); show3.addActionListener(new ActionListener() //监听朋友 { public void actionPerformed(ActionEvent e) { new Print("朋友",1); } }); show4.addActionListener(new ActionListener() //监听亲戚 { public void actionPerformed(ActionEvent e) { new Print("亲戚",1); } }); show5.addActionListener(new ActionListener() //监听全体人员 { public void actionPerformed(ActionEvent e) { new Print("全体人员",0); } }); } public static void main(String []args){ new MyAddBook(); } public static String[] getSortOfChinese(String[] a) { // Collator 类是用来执行区分语言环境这里使用CHINA Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); // JDKz自带对数组进行排序。 Arrays.sort(a, cmp); return a; } } //输入类 class Typein implements ActionListener{ public static int z=2; public static int y=0; public JLabel Lname,Lgroup,Lbirthday,Lphone,Lemail,Lother,Lnote; public JTextField Tname=new JTextField(10),Tphone=new JTextField(15), Temail=new JTextField(15),Tother=new JTextField(15); public Choice Cgroup=new Choice(),Cbirthyear=new Choice(),Cbirthmonth=new Choice(), Cbirthday=new Choice(); public JButton certain,cancel; public JFrame frame=new JFrame("录入联系人信息"); public Typein(){ Cgroup.addItem("无"); Cgroup.addItem("同学"); Cgroup.addItem("同事"); Cgroup.addItem("朋友"); Cgroup.addItem("亲戚"); Cbirthyear.addItem("1985"); Cbirthyear.addItem("1986"); Cbirthyear.addItem("1987"); Cbirthyear.addItem("1988"); Cbirthyear.addItem("1989"); Cbirthyear.addItem("1990"); Cbirthyear.addItem("1991"); Cbirthyear.addItem("1992"); Cbirthyear.addItem("1993"); Cbirthyear.addItem("1994"); Cbirthyear.addItem("1995"); Cbirthyear.addItem("1996"); Cbirthyear.addItem("1997"); Cbirthyear.addItem("1998"); Cbirthyear.addItem("1999"); Cbirthyear.addItem("2000"); Cbirthmonth.addItem("01"); Cbirthmonth.addItem("02"); Cbirthmonth.addItem("03"); Cbirthmonth.addItem("04"); Cbirthmonth.addItem("05"); Cbirthmonth.addItem("06"); Cbirthmonth.addItem("07"); Cbirthmonth.addItem("08"); Cbirthmonth.addItem("09"); Cbirthmonth.addItem("10"); Cbirthmonth.addItem("11"); Cbirthmonth.addItem("12"); Cbirthday.addItem("01"); Cbirthday.addItem("02"); Cbirthday.addItem("03"); Cbirthday.addItem("04"); Cbirthday.addItem("05"); Cbirthday.addItem("06"); Cbirthday.addItem("07"); Cbirthday.addItem("08"); Cbirthday.addItem("09"); Cbirthday.addItem("10"); Cbirthday.addItem("11"); Cbirthday.addItem("12"); Cbirthday.addItem("13"); Cbirthday.addItem("14"); Cbirthday.addItem("15"); Cbirthday.addItem("16"); Cbirthday.addItem("17"); Cbirthday.addItem("18"); Cbirthday.addItem("19"); Cbirthday.addItem("20"); Cbirthday.addItem("21"); Cbirthday.addItem("22"); Cbirthday.addItem("23"); Cbirthday.addItem("24"); Cbirthday.addItem("25"); Cbirthday.addItem("26"); Cbirthday.addItem("27"); Cbirthday.addItem("28"); Cbirthday.addItem("29"); Cbirthday.addItem("30"); Cbirthday.addItem("31"); } public void typein(){ Container c=frame.getContentPane(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500,300); frame.setLayout(new GridLayout(5,1,5,5)); frame.setVisible(true); Lname=new JLabel("姓名:"); Lgroup=new JLabel("组别:"); Lbirthday=new JLabel("生日:"); Lphone=new JLabel("电话:"); Lemail=new JLabel("Email:"); Lother=new JLabel("其他:"); Lnote=new JLabel("注释:”其他“中输入所在学校 /共事单位/认识地方/亲戚称呼"); certain=new JButton("确定"); cancel=new JButton("取消"); JPanel pane1=new JPanel(); JPanel pane2=new JPanel(); JPanel pane3=new JPanel(); JPanel pane4=new JPanel(); JPanel pane5=new JPanel(); c.add(pane1); c.add(pane2); c.add(pane3); c.add(pane4); c.add(pane5); pane1.add(Lname); pane1.add(Tname); pane1.add(Lgroup); pane1.add(Cgroup); pane2.add(Lbirthday); pane2.add(Cbirthyear); pane2.add(Cbirthmonth); pane2.add(Cbirthday); pane2.add(Lphone); pane2.add(Tphone); pane3.add(Lemail); pane3.add(Temail); pane3.add(Lother); pane3.add(Tother); pane4.add(Lnote); pane5.add(certain); pane5.add(cancel); certain.addActionListener(new ActionListener() //设置监听器 { public void actionPerformed(ActionEvent e) //用匿名内部类实现监听器 { if(Tname.getText().equals("")) JOptionPane.showMessageDialog(null,"录入失败,姓名必须填写!", "录入结果",JOptionPane.INFORMATION_MESSAGE); else{ try { FileWriter AddressBook=new FileWriter("D:\\AddressBook.txt",true); PrintWriter add=new PrintWriter(AddressBook); String s1,s2,s3,s4; if(Tname.getText().equals(""))s1="无";else s1=Tname.getText(); if(Tphone.getText().equals(""))s2="无";else s2=Tphone.getText(); if(Temail.getText().equals(""))s3="无";else s3=Temail.getText(); if(Tother.getText().equals(""))s4="无";else s4=Tother.getText(); /*add.println(Tname.getText()+'\t'+Cgroup.getSelectedItem()+'\t'+Cbirthyear.getSelectedIt em()+ ' '+Cbirthmonth.getSelectedItem()+' '+Cbirthday.getSelectedItem()+ '\t'+Tphone.getText()+'\t'+Temail.getText()+'\t'+Tother.getText());*/ add.println(s1+'\t'+Cgroup.getSelectedItem()+'\t'+Cbirthyear.getSelectedItem()+ ' '+Cbirthmonth.getSelectedItem()+' '+Cbirthday.getSelectedItem()+ '\t'+s2+'\t'+s3+'\t'+s4); add.close(); AddressBook.close(); z=1; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if(y==0){ JOptionPane.showMessageDialog(null,"录入成功", "录入结果",JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null,"修改成功", "修改结果",JOptionPane.INFORMATION_MESSAGE); } Tname.setText(""); Tphone.setText(""); Temail.setText(""); Tother.setText(""); //Cgroup.setName("无"); //Cbirthyear.setName("1985"); //Cbirthmonth.setName("1"); //Cbirthday.setName("1"); } } }); cancel.addActionListener(new ActionListener() //设置监听器 { public void actionPerformed(ActionEvent e) //用匿名内部类实现监听器 { frame.dispose(); z=0; } }); } public void actionPerformed(ActionEvent e) { new Typein().typein(); } }

java递归删除目录的一个小问题

import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; import java.text.SimpleDateFormat; import java.util.Date; public class DeleteFilesDemo { public static void main(String[] args) throws FileNotFoundException { // TODO Auto-generated method stub File dir = new File("C:\\CODE\\a"); deleteDir(dir); printTime(); } public static void deleteDir(File dir) { File[] files = dir.listFiles(); for (File f : files) { if (f.isDirectory()) deleteDir(f); else System.out.println(f.toString() + "——" + f.delete()); } System.out.println(dir.toString() + "................" + dir.delete()); } public static void printTime() throws FileNotFoundException { String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); new PrintStream("c:/code/deleteTime.log").print(time + "\r\n所有目录与文件删除成功!"); } } 请问,如果递归到一个空目录,再调用一次deleteDir得到的File数组不就是空的了吗?那么遍历的时候为什么不会出现异常呢?

关于java文件压缩API(ZipOutputStream),压缩后的文件部分数据丢失的问题

<pre name="code" class="java">如题:源文件为一个.del文本文件,在压缩后文件末尾总是会丢失一部分数据,请高手帮我看一下代码,是哪里出错了? </pre> <pre name="code" class="java">public static void zip(String fileName) throws FileNotFoundException,IOException,ZipException{ //获取文件后缀,包括"." String suffix = fileName.substring(fileName.lastIndexOf(".")); String zipFileName = fileName.replace(suffix, ".zip"); File srcFile = new File(fileName); File zipFile = new File(zipFileName); if(!srcFile.exists()){ throw new FileNotFoundException("指定的源文件不存在!"); } BufferedInputStream in = null; ZipOutputStream zipOut = null; try { // 创建字节输入流对象 in = new BufferedInputStream(new FileInputStream(srcFile)); // 创建文件输出流对象 FileOutputStream f = new FileOutputStream(zipFile); CheckedOutputStream ch = new CheckedOutputStream(f, new CRC32()); // 创建ZIP数据输出流对象 zipOut = new ZipOutputStream( new BufferedOutputStream(ch, 4096)); // 创建指向压缩原始文件的入口 ZipEntry entry = new ZipEntry(srcFile.getName()); zipOut.putNextEntry(entry); // 向压缩文件中输出数据 byte[] b = new byte[4096]; int count = -1; while ((count = in.read(b)) != -1) { zipOut.write(b,0,count); } zipOut.closeEntry(); throw new IOException("error"); } catch (IOException e) { // 如果抛出异常,则删除生成的压缩文件 if(zipFile != null &amp;&amp; zipFile.exists()){ zipOut.close();zipFile.delete(); } throw e; } finally { // 关闭创建的流对象 if(in != null) in.close(); if(zipOut != null) zipOut.close(); } } </pre> <p> <br><br>文件压缩前后对比截图:</p> <p><img style="float: left;" src="/problems/C:%5CDocuments%20and%20Settings%5CAdministrator.WWW-64743B3C83E%5C%E6%A1%8C%E9%9D%A2%5CQQ%E6%88%AA%E5%9B%BE%E6%9C%AA%E5%91%BD%E5%90%8D.png" alt="压缩前" width="200" height="150"></p> <p><img src="/problems/C:%5CDocuments%20and%20Settings%5CAdministrator.WWW-64743B3C83E%5C%E6%A1%8C%E9%9D%A2%5CQQ%E6%88%AA%E5%9B%BE%E6%9C%AA%E5%91%BD%E5%90%8D1.png" alt="压缩后" width="200" height="150"></p> <p> </p><br /><strong>问题补充:</strong><br />但是我用winrar查看压缩文件,里面的数据确实不完整啊<br /><strong>问题补充:</strong><br />但是我用winrar查看压缩文件,里面的数据确实不完整啊,就像那个截图<br /><strong>问题补充:</strong><br />我用的是ant.jar,会不会是这里出了问题?<br /><strong>问题补充:</strong><br />问题找到了,这段代码本身没有问题,是外层调用的方法写错了,主要是太大意了,外层方法是首先从数据库中把数据读出来写入.del文件,然后再调用这个方法将.del文件压缩。在调用这个方法的时候,外层方法里面没有将.del文件对应的输出流关闭,也没有调用flush()方法,所以文件末尾的一部分数据其实还在缓冲区中,根本都还没有写到文件中呢,怎么能指望在输入流中把这部分数据得到呢?呵呵,这个错误还是比较低级的,谢过了。

如何在android中解决Java.Io.IoException

<div class="post-text" itemprop="text"> <p>I'm trying to call php web service using post method and parameters, but im getting exception at OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); this line, i have noticed by debugging, i have search for this error but not getting any proper solutions, can anyone help me to solve this error? thanks in advance.</p> <pre><code>String data = URLEncoder.encode("name", "UTF-8") + "=" + URLEncoder.encode("wsd", "UTF-8"); data += "&amp;" + URLEncoder.encode("email", "UTF-8") + "=" + URLEncoder.encode("asd", "UTF-8"); data += "&amp;" + URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode("asd", "UTF-8"); data += "&amp;" + URLEncoder.encode("pass", "UTF-8") + "=" + URLEncoder.encode("sad", "UTF-8"); String text = ""; BufferedReader reader=null; try { // Defined URL where to send data URL url = new URL("http://androidexample.com/media/webservice/httppost.php"); // Send POST data request URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write( data ); wr.flush(); // Get the server response reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder sb = new StringBuilder(); String line = null; // Read Server Response while((line = reader.readLine()) != null) { // Append server response in string sb.append(line + " "); } text = sb.toString(); } catch(Exception ex) { } finally { try { reader.close(); } catch(Exception ex) {} } // Show response on activity //content.setText( text ); return text; } </code></pre> </div>

Linux远程执行sh脚本出错

首先我在一台机器上执行一个脚本,能在本机正常执行成功,脚本的功能为删除之前的war包备份文件,解压最新war包并通过发布到tomcat上 截取片段片段为 #/usr/bin/sh if [ -d /opt/apache-tomcat-7.0.41/publish/testbak ] then echo "delete testbak" rm -rf /opt/apache-tomcat-7.0.41/publish/testbak fi if [ -f /opt/apache-tomcat-7.0.41/publish/test.war ] then mkdir /opt/apache-tomcat-7.0.41/publish/test echo "mkdir success" mv /opt/apache-tomcat-7.0.41/publish/test.war /opt/apache-tomcat-7.0.41/publish/test cd /opt/apache-tomcat-7.0.41/publish/test jar xf /opt/apache-tomcat-7.0.41/publish/test/test.war mv /opt/apache-tomcat-7.0.41/publish/test/test.war .. cd .. else echo "test.war does not exist, quit" exit 1 fi echo "stop tomcat..." cd ../bin sh shutdown.sh 然后我通过ssh usr@ip "cd 脚本路径 ; ./test.sh" 它就报错了 ``` test.sh: line 21: jar: command not found stop tomcat... /opt/apache-tomcat-7.0.41/bin/catalina.sh: line 438: /was/jdk/jdk1.6.0_35/bin/java: No such file or directory cp: cannot stat `testbak/WEB-INF/classes/*.properties': No such file or dire_ctory ``` _我这边也用了绝对路径,不清楚为何会报这样的错_

android调用系统相机拍照报错,onActivityResult中data为null

这是书上的一个练习,对着敲的,运行时拍照后点完成就出错,什么原因啊?怎么解决 ![图片说明](https://img-ask.csdn.net/upload/201607/20/1469014779_796890.png) import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { public static final int TAKE_PHOTO=1; public static final int CROP_PHOTO=2; private Button takePhoto; private ImageView picture; private Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取控件实例 takePhoto=(Button) findViewById(R.id.take_photo); picture=(ImageView) findViewById(R.id.picture); takePhoto.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //创建File对象,拥有储存拍的照片 File outputImage=new File(Environment.getExternalStorageDirectory(),"outputImag.jpg"); //getExternalStorageDirectory()获取手机sd卡的根目录 try{ if(outputImage.exists()){ outputImage.delete(); } outputImage.createNewFile(); }catch(IOException e){ e.printStackTrace(); } //将File对象转换成Uri对象 imageUri=Uri.fromFile(outputImage); Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定保存路径 startActivityForResult(intent,TAKE_PHOTO);//启动相机程序 拍完照后返回到onAcitvityResult() } }); } protected void onActivityResult(int requestCode, int resultCode, Intent data ){ Log.d("MainActivity", "ok"); switch(requestCode){ case TAKE_PHOTO: if (resultCode==RESULT_OK){ //执行裁剪照片的逻辑 Intent intent=new Intent("come.android.camera.action.CROP"); intent.setDataAndType(imageUri, "image/*"); intent.putExtra("crop", true); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);//输出文件 startActivityForResult(intent, CROP_PHOTO); // 启动裁剪程序 } break; case CROP_PHOTO: if(resultCode==RESULT_OK){ try { // 用BitmapFactory的decodeStream()方法将output_image.jpg这张照片解析成Bitmap对象 Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); picture.setImageBitmap(bitmap);//显示裁剪的照片 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } break; default: break; } } } ``` ```

CruiseControl 使用Ant启动tomcat后 cc为何不继续执行,手动关闭tomcat窗口,cc继续轮询下一次构建

因为项目需要做了一个CI服务器,使用的是CruiseContol+SVN+Ant,在CC的<schedule>中我配置了两个ant的脚本,一个是执行build的脚本,一个是执行release的脚本,build的时间间隔目前设置为3分钟,release是每天往web服务器上将build.xml打出的最新war包部署一次,代码如下: [code="java"] <schedule interval="180"> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/release.xml" time="1002"/> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" /> </schedule> [/code] 我单独只放build脚本时CC正常,每隔3分钟构建一次,但加入release脚本后就出现了问题,我release.xml脚本如下:[code="java"] <project name="eadp" default="releaseok" basedir="."> <property name="tomcatHome" value="E:\TDDOWNLOAD\apache-tomcat-6.0.33"/> <property name="target" value="${basedir}/target"/> <!-- 清理tomcat的work文件夹 ,原项目文件及war包--> <target name="clean" depends="shutdowntomcat"> <delete dir="${tomcatHome}/work/Catalina/localhost/${ant.project.name}"/> <delete dir="${tomcatHome}/webapps/${ant.project.name}"/> <delete file="${tomcatHome}/webapps/${ant.project.name}.war"/> </target> <!-- 关闭tomcat --> <target name="shutdowntomcat"> <!-- 调用tomcat shutdown命令强制关闭 --> <exec executable="${tomcatHome}/bin/shutdown.bat" failonerror="false"></exec> <!-- 休息30秒,等待关闭完成 --> <sleep seconds="30"/> </target> <!-- 启动tomcat --> <target name="startuptomcat" depends="copyWar"> <exec executable="${tomcatHome}/bin/startup.bat" spawn="true" vmlauncher="false"> <env key="CATALINA_HOME" value="${tomcatHome}" /> <arg line="/c start ${tomcatHome}/bin/startup.bat" /> </exec> </target> <!-- 拷贝war至tomcat目录 --> <target name="copyWar" depends="clean"> <copy file="${target}/${ant.project.name}.war" todir="${tomcatHome}/webapps"></copy> </target> <target name="releaseok" depends="startuptomcat"> <echo message="release eadp-web ok"></echo> </target> </project> [/code] 因为这个脚本中有打开tomcat的target,所以执行这个脚本时打开tomcat后,releaseok的target也能执行,也输出了内容,CC提示Build Success,但是并没有像build.xml脚本执行完成后CC输出的 next build in 3 minutes,查看logs里面的status.txt里面记录的是 2011-11-16T02:08:26 releaseok 就是我的release.xml的最后一个target,然后CC就停止在这里了,不继续轮询下一个构建,如果这时我手动关闭刚才ant打开的tomcat窗口手动关闭,CC的控制台马上就有了反应,会正常输出下一次build的时间 然后一切就正常了。似乎CC是在等待打开的Tomcat窗口给它一个返回的信息,我如何能让ant执行的打开tomcat后让CC继续下一次构建呢? CC的porject全配置如下: [code="java"] <project name="eadp-web"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt"/> </listeners> <bootstrappers> <svnbootstrapper localWorkingCopy="projects/${project.name}" /> </bootstrappers> <modificationset quietperiod="30"> <filesystem folder="projects/${project.name}"/> </modificationset> <schedule interval="180"> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/release.xml" time="1002"/> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" /> </schedule> <log> <merge dir="projects/${project.name}/target/test-results"/> </log> <publishers> <onsuccess> <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/eadp.war"/> </onsuccess> </publishers> </project>[/code]

Struts 2 动态调用 奇怪问题

Struts Problem Report Struts has detected an unhandled exception: # Messages: No result defined for action com.news.background.action.UserAction and result input File: file:/D:/Program%20Files/tomcat/eclipse/6.5/apache-tomcat-6.0.14/webapps/news/WEB-INF/classes/struts.xml Line number: 14 Column number: 62 </action> <!-- ??????Action ????????* {1}????????????? User_delete ????????serAction???deletet??? --> <action name="User_*" class="UserAction" method="{1}"> <result name="success">success.jsp</result> <result name="error">error.jsp</result> Stacktraces No result defined for action com.news.background.action.UserAction and result input - action - file:/D:/Program%20Files/tomcat/eclipse/6.5/apache-tomcat-6.0.14/webapps/news/WEB-INF/classes/struts.xml:14:62 com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:350) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set: struts.devMode=false in your WEB-INF/classes/struts.properties file.

求一个java项目参考:webservice股票接口,输入查询股票以及GIF走势图。下面我写的帮看下

我的代码: private String theStockCode; //股票编号 private String theType; //股票走势图:年月日格式 public String getTheStockCode() { return theStockCode; } public void setTheStockCode(String theStockCode) { this.theStockCode = theStockCode; } public String getTheType() { return theType; } public void setTheType(String theType) { this.theType = theType; } private static String getSoapRequest(String theStockCode, String theType) { StringBuilder sb = new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "<soap:Body> <getStockImage_kByCode xmlns=\"http://WebXml.com.cn/\">" + "<theStockCode>" + theStockCode + "</theStockCode>" + "<theType>" + theType + "</theType> </getStockImage_kByCode>" + "</soap:Body></soap:Envelope>"); return sb.toString(); } private static InputStream getSoapInputStream(String theStockCode, String theType) throws Exception { try { String soap = getSoapRequest(theStockCode, theType); if (soap == null) { return null; } URL url = new URL( "http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx"); URLConnection conn = url.openConnection(); conn.setUseCaches(false); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestProperty("Content-Length", Integer.toString(soap.length())); conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); conn.setRequestProperty("SOAPAction", "http://WebXml.com.cn/getStockImage_kByCode"); OutputStream os = conn.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8"); osw.write(soap); osw.flush(); osw.close(); InputStream is = conn.getInputStream(); return is; } catch (Exception e) { e.printStackTrace(); return null; } } private static void saveImageAsGif(InputStream in) throws Exception { BufferedImage srcImage ; File saveFile = new File( "D:\\下载\\i18n\\WebRoot\\image\\stock.jpg"); if (saveFile.exists()) { saveFile.delete(); } srcImage= ImageIO.read(in); ImageIO.write(srcImage, "jpg", saveFile); in.close(); } public String execute() throws Exception { InputStream is = getSoapInputStream(theStockCode, theType); System.out.println(is); //这里打印的是图片首地址 ,老是获取不到图片码好为难 ,这里要是能解决了 我的问题就没了! saveImageAsGif(is); return "st"; }

WindowsMiniFilter 文件过滤驱动开发之文件操作

最近一直在做操作系统的大作业,作业的要求是开发一个Windows文件过滤驱动,对某一个文本文件xxxx.txt进行保护。首先,驱动要读取权限记录文件user.txt,文件内记录有read_false/read_true,write_false/write_true,delete_false/delete_true,每个文件记录有三个操作的其中一个,true或者false, ![图片说明](https://img-ask.csdn.net/upload/201805/09/1525874689_92813.png) 然后驱动在根据相应的权限进行下一步操作。 我们现在遇到的问题是,可以对文本文件xxxx.txt进行相应的保护,即防止删除,防止写,防止读,但是问题在于读取不了权限记录文件.我们使用的是FLTxxxFile()系列函数。但是每次驱动运行后,电脑马上就蓝屏了。。。 具体代码如下:(环境:Visual Studio2017) 1.先放出一个IRP_MJ_WRITE,pre函数为WritePreOperation() ![图片说明](https://img-ask.csdn.net/upload/201805/09/1525875021_156057.png) 2.读取权限文件的相关函数ReadFileTest(PVOID buffer) 打开权限文件,然后读取内容到buffer. ``` NTSTATUS ReadFileTest(PVOID buffer) { NTSTATUS status = STATUS_UNSUCCESSFUL; //PVOID buffer = NULL; ULONG total_len = 0; ULONG readbytes = 0; ULONG byteswritten = 0; HANDLE FileHandle = NULL; PFILE_OBJECT FileObject = NULL; OBJECT_ATTRIBUTES ObjectAttributes; IO_STATUS_BLOCK IoStatus; PFLT_VOLUME Volume = NULL; PFLT_INSTANCE Instance = NULL; PUNICODE_STRING FullFileName = NULL; RtlInitUnicodeString(FullFileName, L"\C:\user.txt"); InitializeObjectAttributes( &ObjectAttributes, FullFileName, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, NULL, NULL ); status = FltCreateFileEx( gFilterHandle, Instance, &FileHandle, &FileObject, GENERIC_READ, &ObjectAttributes, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_OPEN, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_ALERT | FILE_SEQUENTIAL_ONLY | FILE_COMPLETE_IF_OPLOCKED, NULL, 0, IO_NO_PARAMETER_CHECKING ); if (FileObject) { //read the file //get the volume status = FltGetVolumeFromFileObject(gFilterHandle, FileObject, &Volume); if (NT_SUCCESS(status)) { status = FltGetVolumeInstanceFromName( gFilterHandle, Volume, NULL, &Instance ); // if (NT_SUCCESS(status)) // { // while (STATUS_END_OF_FILE != FltReadFile(Instance, FileObject, NULL, 4096, // buffer, FLTFL_IO_OPERATION_NON_CACHED, &readbytes, NULL, NULL)) // { // total_len += readbytes; // PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("SSMF:Read length is %u,total len is %u\n", readbytes, total_len)); // FltWriteFile(Instance, FileObject2, NULL, readbytes, buffer, FLTFL_IO_OPERATION_NON_CACHED, &byteswritten, NULL, NULL); // } // } FltReadFile(Instance, FileObject, NULL, 4096, buffer, FLTFL_IO_OPERATION_NON_CACHED, &readbytes, NULL, NULL); if (Volume) { FltObjectDereference(Volume); } if (Instance) { FltObjectDereference(Instance); } } if (FileObject) { FltClose(FileHandle); ObDereferenceObject(FileObject); } return status; } } ``` 3.WritePreOperation() 我们是这样想的,得到在函数ReadFileTest中读取到了内容的buffer,然后再调用wcsstr(buffer,L"WRITE_FALSE") 看看buffer 里面有没有相应的权限子串,再进行相应的操作。 ``` FLT_PREOP_CALLBACK_STATUS WritePreOperation( _Inout_ PFLT_CALLBACK_DATA Data, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext ) { UNREFERENCED_PARAMETER(FltObjects); UNREFERENCED_PARAMETER(CompletionContext); PAGED_CODE(); { PFLT_FILE_NAME_INFORMATION nameInfo; WCHAR buffer[64] = { 0 }; ReadFileTest(buffer); //直接获得文件名并检查 if (NT_SUCCESS(FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &nameInfo))) { if (NT_SUCCESS(FltParseFileNameInformation(nameInfo))) { WCHAR pTempBuf[512] = { 0 }; WCHAR *pNonPageBuf = NULL, *pTemp = pTempBuf; if (nameInfo->Name.MaximumLength > 512) { pNonPageBuf = ExAllocatePool(NonPagedPool, nameInfo->Name.MaximumLength); pTemp = pNonPageBuf; } RtlCopyMemory(pTemp, nameInfo->Name.Buffer, nameInfo->Name.MaximumLength); DbgPrint("[MiniFilter][IRP_MJ_WRITE]%wZ", &nameInfo->Name); _wcsupr(pTemp); _wcsupr(buffer); if (NULL != wcsstr(pTemp, L"XXXX.TXT")&& NULL != wcsstr(buffer,L"WRITE_FALSE")) { if (NULL != pNonPageBuf) ExFreePool(pNonPageBuf); if (buffer != NULL) { ExFreePool(buffer); } FltReleaseFileNameInformation(nameInfo); return FLT_PREOP_DISALLOW_FASTIO; } if (NULL != pNonPageBuf) ExFreePool(pNonPageBuf); if (buffer != NULL) { ExFreePool(buffer); } } FltReleaseFileNameInformation(nameInfo); } } return FLT_PREOP_SUCCESS_NO_CALLBACK; } ``` 工程全景: 代码都是在cFilter.c里面写的,然后测试环境是虚拟机Windows7,没有读取权限文件操作时,可以进行相应的保护,加上后,一运行就蓝屏了。还望有高人指导~ ![图片说明](https://img-ask.csdn.net/upload/201805/09/1525875602_132432.png)

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

广工操作系统课程设计(文档+代码+可执行文件)

实现作业调度(先来先服务)、进程调度功能(时间片轮转) 实现内存管理功能(连续分配)。 实现文件系统功能(选作) 这些功能要有机地连接起来

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

apache-jmeter-5.1.1(Requires Java 8+).zip

。Apache JMeter 5.1.1 (Requires Java 8+),需要jdk8以上的版本。

数通HCNP中文理论全套教材.rar

内涵HCNP-IENP中文理论书-内文,

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

DDR5_Draft_Spec_Rev05c.pdf

DDR5 spec

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

相关热词 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行 c# 循环给数组插入数据 c# 多线程死锁的例子 c# 钉钉读取员工排班 c# label 不显示 c#裁剪影像 c#工作进程更新ui
立即提问