免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2833 | 回复: 6
打印 上一主题 下一主题

Java文件操作大全 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-17 13:22 |只看该作者 |倒序浏览
Java文件操作大全  


Java代码
  1. 1.//1.创建文件夹   
  2. 2.//import java.io.*;   
  3. 3.File myFolderPath = new File(str1);   
  4. 4.try {   
  5. 5.    if (!myFolderPath.exists()) {   
  6. 6.       myFolderPath.mkdir();   
  7. 7.    }   
  8. 8.}   
  9. 9.catch (Exception e) {   
  10. 10.    System.out.println("新建目录操作出错");   
  11. 11.    e.printStackTrace();   
  12. 12.}     
  13. 13.  
  14. 14.//2.创建文件   
  15. 15.//import java.io.*;   
  16. 16.File myFilePath = new File(str1);   
  17. 17.try {   
  18. 18.    if (!myFilePath.exists()) {   
  19. 19.        myFilePath.createNewFile();   
  20. 20.    }   
  21. 21.    FileWriter resultFile = new FileWriter(myFilePath);   
  22. 22.    PrintWriter myFile = new PrintWriter(resultFile);   
  23. 23.    myFile.println(str2);   
  24. 24.    resultFile.close();   
  25. 25.}   
  26. 26.catch (Exception e) {   
  27. 27.    System.out.println("新建文件操作出错");   
  28. 28.    e.printStackTrace();   
  29. 29.}     
  30. 30.  
  31. 31.//3.删除文件   
  32. 32.//import java.io.*;   
  33. 33.File myDelFile = new File(str1);   
  34. 34.try {   
  35. 35.    myDelFile.delete();   
  36. 36.}   
  37. 37.catch (Exception e) {   
  38. 38.    System.out.println("删除文件操作出错");   
  39. 39.    e.printStackTrace();   
  40. 40.}     
  41. 41.  
  42. 42.//4.删除文件夹   
  43. 43.//import java.io.*;   
  44. 44.File delFolderPath = new File(str1);   
  45. 45.try {   
  46. 46.    delFolderPath.delete(); //删除空文件夹   
  47. 47.}   
  48. 48.catch (Exception e) {   
  49. 49.    System.out.println("删除文件夹操作出错");   
  50. 50.    e.printStackTrace();   
  51. 51.}     
  52. 52.  
  53. 53.//5.删除一个文件下夹所有的文件夹   
  54. 54.//import java.io.*;   
  55. 55.File delfile=new File(str1);   
  56. 56.File[] files=delfile.listFiles();   
  57. 57.for(int i=0;i<files.length;i++){   
  58. 58.    if(files[i].isDirectory()){   
  59. 59.        files[i].delete();   
  60. 60.    }   
  61. 61.}      
  62. 62.   
  63. 63.//6.清空文件夹   
  64. 64.//import java.io.*;   
  65. 65.File delfilefolder=new File(str1);   
  66. 66.try {   
  67. 67.    if (!delfilefolder.exists()) {   
  68. 68.        delfilefolder.delete();   
  69. 69.    }   
  70. 70.    delfilefolder.mkdir();   
  71. 71.}   
  72. 72.catch (Exception e) {   
  73. 73.    System.out.println("清空目录操作出错");   
  74. 74.    e.printStackTrace();   
  75. 75.}     
  76. 76.  
  77. 77.//7.读取文件   
  78. 78.//import java.io.*;   
  79. 79.// 逐行读取数据   
  80. 80.FileReader fr = new FileReader(str1);   
  81. 81.BufferedReader br = new BufferedReader(fr);   
  82. 82.String str2 = br.readLine();   
  83. 83.while (str2 != null) {   
  84. 84.    str3   
  85. 85.    str2 = br.readLine();   
  86. 86.}   
  87. 87.br.close();   
  88. 88.fr.close();     
  89. 89.  
  90. 90.//8.写入文件   
  91. 91.//import java.io.*;   
  92. 92.// 将数据写入文件   
  93. 93.try {   
  94. 94.    FileWriter fw = new FileWriter(str1);   
  95. 95.    fw.write(str2);   
  96. 96.    fw.flush();   
  97. 97.    fw.close();     
  98. 98.} catch (IOException e) {   
  99. 99.    e.printStackTrace();   
  100. 100.}   
  101. 101.  
  102. 102.//9.写入随机文件   
  103. 103.//import java.io.*;   
  104. 104.try {   
  105. 105.    RandomAcessFile logFile=new RandomAcessFile(str1,"rw");   
  106. 106.    long lg=logFile.length();   
  107. 107.    logFile.seek(str2);   
  108. 108.    logFile.writeByte(str3);   
  109. 109.}catch(IOException ioe){   
  110. 110.    System.out.println("无法写入文件:"+ioe.getMessage());   
  111. 111.}     
  112. 112.  
  113. 113.//10.读取文件属性   
  114. 114.//import java.io.*;   
  115. 115.// 文件属性的取得   
  116. 116.File f = new File(str1);   
  117. 117.if (af.exists()) {   
  118. 118.    System.out.println(f.getName() + "的属性如下: 文件长度为:" + f.length());   
  119. 119.    System.out.println(f.isFile() ? "是文件" : "不是文件");   
  120. 120.    System.out.println(f.isDirectory() ? "是目录" : "不是目录");   
  121. 121.    System.out.println(f.canRead() ? "可读取" : "不");   
  122. 122.    System.out.println(f.canWrite() ? "是隐藏文件" : "");   
  123. 123.    System.out.println("文件夹的最后修改日期为:" + new Date(f.lastModified()));   
  124. 124.    } else {   
  125. 125.    System.out.println(f.getName() + "的属性如下:");   
  126. 126.    System.out.println(f.isFile() ? "是文件" : "不是文件");   
  127. 127.    System.out.println(f.isDirectory() ? "是目录" : "不是目录");   
  128. 128.    System.out.println(f.canRead() ? "可读取" : "不");   
  129. 129.    System.out.println(f.canWrite() ? "是隐藏文件" : "");   
  130. 130.    System.out.println("文件的最后修改日期为:" + new Date(f.lastModified()));   
  131. 131.}   
  132. 132.if(f.canRead()){   
  133. 133.    str2   
  134. 134.}   
  135. 135.if(f.canWrite()){   
  136. 136.    str3   
  137. 137.}   
  138. 138.  
  139. 139.//11.写入属性   
  140. 140.//import java.io.*;   
  141. 141.File filereadonly=new File(str1);   
  142. 142.try {   
  143. 143.    boolean b=filereadonly.setReadOnly();   
  144. 144.}   
  145. 145.catch (Exception e) {   
  146. 146.    System.out.println("拒绝写访问:"+e.printStackTrace());   
  147. 147.}     
  148. 148.  
  149. 149.//12.枚举一个文件夹中的所有文件   
  150. 150.//import java.io.*;   
  151. 151.//import java.util.*;   
  152. 152.LinkedList<String> folderList = new LinkedList<String>();   
  153. 153.folderList.add(str1);   
  154. 154.while (folderList.size() > 0) {   
  155. 155.    File file = new File(folderList.peek());   
  156. 156.    folderList.removeLast();   
  157. 157.    File[] files = file.listFiles();   
  158. 158.    ArrayList<File> fileList = new ArrayList<File>();   
  159. 159.    for (int i = 0; i < files.length; i++) {   
  160. 160.        if (files[i].isDirectory()) {   
  161. 161.            folderList.add(files[i].getPath());   
  162. 162.        } else {   
  163. 163.            fileList.add(files[i]);   
  164. 164.        }   
  165. 165.    }   
  166. 166.    for (File f : fileList) {   
  167. 167.        str2=f.getAbsoluteFile();   
  168. 168.        str3   
  169. 169.    }   
  170. 170.}   
  171. 171.  
  172. 172.//13.复制文件夹     
  173. 173.//import java.io.*;   
  174. 174.//import java.util.*;   
  175. 175.LinkedList<String> folderList = new LinkedList<String>();   
  176. 176.folderList.add(str1);   
  177. 177.LinkedList<String> folderList2 = new LinkedList<String>();   
  178. 178.folderList2.add(str2+ str1.substring(str1.lastIndexOf("\\")));   
  179. 179.while (folderList.size() > 0) {   
  180. 180.    (new File(folderList2.peek())).mkdirs(); // 如果文件夹不存在 则建立新文件夹   
  181. 181.    File folders = new File(folderList.peek());   
  182. 182.    String[] file = folders.list();   
  183. 183.    File temp = null;   
  184. 184.    try {   
  185. 185.        for (int i = 0; i < file.length; i++) {   
  186. 186.            if (folderList.peek().endsWith(File.separator)) {   
  187. 187.                temp = new File(folderList.peek() + File.separator   
  188. 188.                + file[i]);   
  189. 189.            } else {   
  190. 190.                temp = new File(folderList.peek() + File.separator + file[i]);   
  191. 191.            }   
  192. 192.            if (temp.isFile()) {   
  193. 193.                FileInputStream input = new FileInputStream(temp);   
  194. 194.                FileOutputStream output = new FileOutputStream(   
  195. 195.                folderList2.peek() + File.separator + (temp.getName()).toString());   
  196. 196.                byte[] b = new byte[5120];   
  197. 197.                int len;   
  198. 198.                while ((len = input.read(b)) != -1) {   
  199. 199.                    output.write(b, 0, len);   
  200. 200.                }   
  201. 201.                output.flush();   
  202. 202.                output.close();   
  203. 203.                input.close();   
  204. 204.            }   
  205. 205.            if (temp.isDirectory()) {// 如果是子文件夹   
  206. 206.                for (File f : temp.listFiles()) {   
  207. 207.                    if (f.isDirectory()) {   
  208. 208.                        folderList.add(f.getPath());   
  209. 209.                        folderList2.add(folderList2.peek()   
  210. 210.                        + File.separator + f.getName());   
  211. 211.                    }   
  212. 212.                }   
  213. 213.            }   
  214. 214.        }   
  215. 215.    } catch (Exception e) {   
  216. 216.    //System.out.println("复制整个文件夹内容操作出错");   
  217. 217.        e.printStackTrace();   
  218. 218.    }   
  219. 219.    folderList.removeFirst();   
  220. 220.    folderList2.removeFirst();   
  221. 221.}   
  222. 222.  
  223. 223.//14.复制一个文件夹下所有的文件夹到另一个文件夹下   
  224. 224.//import java.io.*;   
  225. 225.//import java.util.*;   
  226. 226.File copyfolders=new File(str1);   
  227. 227.File[] copyfoldersList=copyfolders.listFiles();   
  228. 228.for(int k=0;k<copyfoldersList.length;k++){   
  229. 229.    if(copyfoldersList[k].isDirectory()){   
  230. 230.        ArrayList<String>folderList=new ArrayList<String>();   
  231. 231.        folderList.add(copyfoldersList[k].getPath());   
  232. 232.        ArrayList<String>folderList2=new ArrayList<String>();   
  233. 233.        folderList2.add(str2+"/"+copyfoldersList[k].getName());   
  234. 234.        for(int j=0;j<folderList.length;j++){   
  235. 235.             (new File(folderList2.get(j))).mkdirs(); //如果文件夹不存在 则建立新文件夹   
  236. 236.             File folders=new File(folderList.get(j));   
  237. 237.             String[] file=folders.list();   
  238. 238.             File temp=null;   
  239. 239.             try {   
  240. 240.                 for (int i = 0; i < file.length; i++) {   
  241. 241.                     if(folderList.get(j).endsWith(File.separator)){   
  242. 242.                         temp=new File(folderList.get(j)+"/"+file[i]);   
  243. 243.                     } else {   
  244. 244.                         temp=new File(folderList.get(j)+"/"+File.separator+file[i]);   
  245. 245.                     }   
  246. 246.                     FileInputStream input = new FileInputStream(temp);   
  247. 247.                     if(temp.isFile()){   
  248. 248.                         FileInputStream input = new FileInputStream(temp);   
  249. 249.                         FileOutputStream output = new FileOutputStream(folderList2.get(j) + "/" + (temp.getName()).toString());   
  250. 250.                         byte[] b = new byte[5120];   
  251. 251.                         int len;   
  252. 252.                         while ( (len = input.read(b)) != -1) {   
  253. 253.                             output.write(b, 0, len);   
  254. 254.                         }   
  255. 255.                         output.flush();   
  256. 256.                         output.close();   
  257. 257.                         input.close();   
  258. 258.                     }   
  259. 259.                     if(temp.isDirectory()){//如果是子文件夹   
  260. 260.                         folderList.add(folderList.get(j)+"/"+file[i]);   
  261. 261.                         folderList2.add(folderList2.get(j)+"/"+file[i]);   
  262. 262.                     }   
  263. 263.                 }   
  264. 264.             }   
  265. 265.             catch (Exception e) {   
  266. 266.                 System.out.println("复制整个文件夹内容操作出错");   
  267. 267.                 e.printStackTrace();   
  268. 268.             }   
  269. 269.        }   
  270. 270.    }   
  271. 271.}   
  272. 272.  
  273. 273.//15.移动文件夹   
  274. 274.//import java.io.*;   
  275. 275.//import java.util.*;   
  276. 276.LinkedList<String> folderList = new LinkedList<String>();   
  277. 277.folderList.add(str1);   
  278. 278.LinkedList<String> folderList2 = new LinkedList<String>();   
  279. 279.folderList2.add(str2 + str1.substring(str1.lastIndexOf("\\")));   
  280. 280.while (folderList.size() > 0) {   
  281. 281.    (new File(folderList2.peek())).mkdirs(); // 如果文件夹不存在 则建立新文件夹   
  282. 282.    File folders = new File(folderList.peek());   
  283. 283.    String[] file = folders.list();   
  284. 284.    File temp = null;   
  285. 285.    try {   
  286. 286.        for (int i = 0; i < file.length; i++) {   
  287. 287.            if (folderList.peek().endsWith(File.separator)) {   
  288. 288.                temp = new File(folderList.peek() + File.separator + file[i]);   
  289. 289.            } else {   
  290. 290.                temp = new File(folderList.peek() + File.separator + file[i]);   
  291. 291.            }   
  292. 292.            if (temp.isFile()) {   
  293. 293.                FileInputStream input = new FileInputStream(temp);   
  294. 294.                FileOutputStream output = new FileOutputStream(   
  295. 295.                folderList2.peek() + File.separator + (temp.getName()).toString());   
  296. 296.                byte[] b = new byte[5120];   
  297. 297.                int len;   
  298. 298.                while ((len = input.read(b)) != -1) {   
  299. 299.                    output.write(b, 0, len);   
  300. 300.                }   
  301. 301.                output.flush();   
  302. 302.                output.close();   
  303. 303.                input.close();   
  304. 304.                if (!temp.delete())   
  305. 305.                System.out.println("删除单个文件操作出错!");   
  306. 306.            }   
  307. 307.            if (temp.isDirectory()) {// 如果是子文件夹   
  308. 308.                for (File f : temp.listFiles()) {   
  309. 309.                    if (f.isDirectory()) {   
  310. 310.                        folderList.add(f.getPath());   
  311. 311.                        folderList2.add(folderList2.peek() + File.separator + f.getName());   
  312. 312.                    }   
  313. 313.                }   
  314. 314.            }   
  315. 315.        }   
  316. 316.    } catch (Exception e) {   
  317. 317.        // System.out.println("复制整个文件夹内容操作出错");   
  318. 318.        e.printStackTrace();   
  319. 319.    }   
  320. 320.    folderList.removeFirst();   
  321. 321.    folderList2.removeFirst();   
  322. 322.}   
  323. 323.File f = new File(str1);   
  324. 324.if (!f.delete()) {   
  325. 325.    for (File file : f.listFiles()) {   
  326. 326.        if (file.list().length == 0) {   
  327. 327.            System.out.println(file.getPath());   
  328. 328.            file.delete();   
  329. 329.        }   
  330. 330.    }   
  331. 331.}   
  332. 332.//16.移动一个文件夹下所有的文件夹到另一个目录下   
  333. 333.//import java.io.*;   
  334. 334.//import java.util.*;   
  335. 335.File movefolders=new File(str1);   
  336. 336.File[] movefoldersList=movefolders.listFiles();   
  337. 337.for(int k=0;k<movefoldersList.length;k++){   
  338. 338.    if(movefoldersList[k].isDirectory()){   
  339. 339.        ArrayList<String>folderList=new ArrayList<String>();   
  340. 340.        folderList.add(movefoldersList[k].getPath());   
  341. 341.        ArrayList<String>folderList2=new ArrayList<String>();   
  342. 342.        folderList2.add(str2+"/"+movefoldersList[k].getName());   
  343. 343.        for(int j=0;j<folderList.length;j++){   
  344. 344.             (new File(folderList2.get(j))).mkdirs(); //如果文件夹不存在 则建立新文件夹   
  345. 345.             File folders=new File(folderList.get(j));   
  346. 346.             String[] file=folders.list();   
  347. 347.             File temp=null;   
  348. 348.             try {   
  349. 349.                 for (int i = 0; i < file.length; i++) {   
  350. 350.                     if(folderList.get(j).endsWith(File.separator)){   
  351. 351.                         temp=new File(folderList.get(j)+"/"+file[i]);   
  352. 352.                     }   
  353. 353.                     else{   
  354. 354.                         temp=new File(folderList.get(j)+"/"+File.separator+file[i]);   
  355. 355.                     }   
  356. 356.                     FileInputStream input = new FileInputStream(temp);   
  357. 357.                     if(temp.isFile()){   
  358. 358.                         FileInputStream input = new FileInputStream(temp);   
  359. 359.                         FileOutputStream output = new FileOutputStream(folderList2.get(j) + "/" + (temp.getName()).toString());   
  360. 360.                         byte[] b = new byte[5120];   
  361. 361.                         int len;   
  362. 362.                         while ( (len = input.read(b)) != -1) {   
  363. 363.                             output.write(b, 0, len);   
  364. 364.                         }   
  365. 365.                         output.flush();   
  366. 366.                         output.close();   
  367. 367.                         input.close();   
  368. 368.                         temp.delete();   
  369. 369.                     }   
  370. 370.                     if(temp.isDirectory()){//如果是子文件夹   
  371. 371.                         folderList.add(folderList.get(j)+"/"+file[i]);   
  372. 372.                         folderList2.add(folderList2.get(j)+"/"+file[i]);   
  373. 373.                     }   
  374. 374.                 }   
  375. 375.             }   
  376. 376.             catch (Exception e) {   
  377. 377.                 System.out.println("复制整个文件夹内容操作出错");   
  378. 378.                 e.printStackTrace();   
  379. 379.             }   
  380. 380.        }   
  381. 381.        movefoldersList[k].delete();   
  382. 382.    }   
  383. 383.}   
  384. 384.  
  385. 385.//17.以一个文件夹的框架在另一个目录创建文件夹和空文件   
  386. 386.//import java.io.*;   
  387. 387.//import java.util.*;   
  388. 388.boolean b=false;//不创建空文件   
  389. 389.ArrayList<String>folderList=new ArrayList<String>();   
  390. 390.folderList.add(str1);   
  391. 391.ArrayList<String>folderList2=new ArrayList<String>();   
  392. 392.folderList2.add(str2);   
  393. 393.for(int j=0;j<folderList.length;j++){   
  394. 394.    (new File(folderList2.get(j))).mkdirs(); //如果文件夹不存在 则建立新文件夹   
  395. 395.    File folders=new File(folderList.get(j));   
  396. 396.    String[] file=folders.list();   
  397. 397.    File temp=null;   
  398. 398.    try {   
  399. 399.        for (int i = 0; i < file.length; i++) {   
  400. 400.            if(folderList.get(j).endsWith(File.separator)){   
  401. 401.                temp=new File(folderList.get(j)+"/"+file[i]);   
  402. 402.            }   
  403. 403.            else{   
  404. 404.                temp=new File(folderList.get(j)+"/"+File.separator+file[i]);   
  405. 405.            }   
  406. 406.            FileInputStream input = new FileInputStream(temp);   
  407. 407.            if(temp.isFile()){   
  408. 408.                if (b) temp.createNewFile();   
  409. 409.            }   
  410. 410.            if(temp.isDirectory()){//如果是子文件夹   
  411. 411.                folderList.add(folderList.get(j)+"/"+file[i]);   
  412. 412.                folderList2.add(folderList2.get(j)+"/"+file[i]);   
  413. 413.            }   
  414. 414.        }   
  415. 415.    }   
  416. 416.    catch (Exception e) {   
  417. 417.        System.out.println("复制整个文件夹内容操作出错");   
  418. 418.        e.printStackTrace();   
  419. 419.    }   
  420. 420.}   
  421. 421.  
  422. 422.//18.复制文件   
  423. 423.//import java.io.*;   
  424. 424. int bytesum = 0;   
  425. 425. int byteread = 0;   
  426. 426. File oldfile = new File(str1);   
  427. 427. try {   
  428. 428. if (oldfile.exists()) { //文件存在时   
  429. 429. FileInputStream inStream = new FileInputStream(oldfile); //读入原文件   
  430. 430. FileOutputStream fs = new FileOutputStream(new File(str2,oldfile.getName()));   
  431. 431. byte[] buffer = new byte[5120];   
  432. 432. int length;   
  433. 433. while ( (byteread = inStream.read(buffer)) != -1) {   
  434. 434. bytesum += byteread; //字节数 文件大小   
  435. 435. System.out.println(bytesum);   
  436. 436. fs.write(buffer, 0, byteread);   
  437. 437. }   
  438. 438. inStream.close();   
  439. 439. }   
  440. 440. }   
  441. 441. catch (Exception e) {   
  442. 442. System.out.println("复制单个文件操作出错");   
  443. 443. e.printStackTrace();   
  444. 444. }     
  445. 445.  
  446. 446.//19.复制一个文件夹下所有的文件到另一个目录   
  447. 447.//import java.io.*;   
  448. 448.File copyfiles=new File(str1);   
  449. 449.File[] files=copyfiles.listFiles();   
  450. 450.for(int i=0;i<files.length;i++){   
  451. 451.    if(!files[i].isDirectory()){   
  452. 452.        int bytesum = 0;   
  453. 453.        int byteread = 0;   
  454. 454.        try {   
  455. 455.            InputStream inStream = new FileInputStream(files[i]); //读入原文件   
  456. 456.            FileOutputStream fs = new FileOutputStream(new File(str2,files[i].getName());   
  457. 457.            byte[] buffer = new byte[5120];   
  458. 458.            int length;   
  459. 459.            while ( (byteread = inStream.read(buffer)) != -1) {   
  460. 460.                bytesum += byteread; //字节数 文件大小   
  461. 461.                System.out.println(bytesum);   
  462. 462.                fs.write(buffer, 0, byteread);   
  463. 463.            }   
  464. 464.            inStream.close();   
  465. 465.        } catch (Exception e) {   
  466. 466.            System.out.println("复制单个文件操作出错");   
  467. 467.            e.printStackTrace();   
  468. 468.        }   
  469. 469.    }   
  470. 470.}     
  471. 471.  
  472. 472.//20.提取扩展名   
  473. 473.String str2=str1.substring(str1.lastIndexOf(".")+1);  
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-05-17 14:04 |只看该作者
嗯,不错,受教了!

论坛徽章:
0
3 [报告]
发表于 2013-06-17 14:31 |只看该作者
没有我想找的 不过非常有用 感谢分享

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
4 [报告]
发表于 2013-06-24 02:35 |只看该作者
嗯,非常有用 感谢分享!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-28 06:20:00
5 [报告]
发表于 2013-07-04 20:56 |只看该作者
强大的IO处理啊

论坛徽章:
0
6 [报告]
发表于 2013-07-12 14:56 |只看该作者
不错不错,收下

论坛徽章:
0
7 [报告]
发表于 2013-07-22 11:13 |只看该作者
挺全的,谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP